Wann sollte ich wp_register_script () mit wp_enqueue_script () im Vergleich zu nur wp_enqueue_script () verwenden?


54

Ich habe Probleme zu verstehen, wann Sie verwenden müssen wp_register_script(). Derzeit benutze ich nur so etwas wie:

add_action( 'admin_enqueue_scripts', array( $this, 'enqueue' ) );
function enqueue() {
    $handle = 'some-handle';
    $js = 'http://example.com/my.js';
    wp_register_script( $handle, $js );
    wp_enqueue_script( $handle );
}

Ich habe viel gelesen (Codex, Blogs usw.), kann aber nicht genau verstehen, wann ich mich zuerst registrieren oder wann ich mich nur anmelden soll. Als Beispiel habe ich festgestellt, dass TwentyTwelve keine Stile oder Skripte registriert, sondern sie nur in eine Warteschlange stellt.

Antworten:


49

Die wp_register_script()Codex-Seite sagt wörtlich:

Eine sichere Möglichkeit, Javascripts in WordPress für die spätere Verwendung mit zu registrieren wp_enqueue_script().

Das heißt, wenn Sie Ihre Skripte registrieren möchten, diese aber nicht direkt in Ihre Seiten laden möchten, können Sie die Dateien einmal registrieren und sie dann bei Bedarf laden.

Zum Beispiel:

Sie haben eine switch-Anweisung, die einige Funktionen lädt, aber zwei von drei Fällen benötigen eine bestimmte Javascript-Datei, und einer nicht. Sie können das Skript jedes Mal in die Warteschlange stellen, was mehr Ressourcen kostet, oder das Skript einfach in die Warteschlange stellen, wenn Sie es benötigen:

...
wp_register_script( 'my-handy-javascript', ... );
...
switch( $somevar ) {
    case 'value':
        wp_enqueue_script( 'my-handy-javascript' ); // needs the file
        ...
    break;
    case 'value2':
        wp_enqueue_script( 'my-handy-javascript' ); // needs the file
        ...
    break;
    default:
    case 'value3': // doesn't needs the file
        ...
    break;
}

Es ist nicht erforderlich, ein Skript zu registrieren und anschließend in die Warteschlange zu stellen. Es kann jedoch eine gewisse Logik in Ihrem Code enthalten, wenn Sie alle Skripts registrieren, die Sie an einer beliebigen Stelle in Ihrem Code benötigen functions.php.

Der Kodex sagt auch Folgendes:

Verwenden Sie die wp_enqueue_scriptsAktion, um diese Funktion aufzurufen oder admin_enqueue_scriptsum sie auf der Administratorseite aufzurufen.

Das bedeutet , dass , wenn Sie Ihren Skript auf den frond-end einzuzureihen und in dem Back-End, Sie einmal ein Skript registrieren können, und dann laden auf dem Front-End mit wp_enqueue_scriptund in dem Back-End mit admin_enqueue_script.
Auf diese Weise haben Sie in einem Thema, Plugin, Widget oder was auch immer nicht zweimal die gleiche Enqueue-Funktion.


Danke. Das hat viel aufgeklärt. Denken Sie also, dass TwentyTwelve sich nicht darum kümmert, sich zuerst zu registrieren, da es sie mit Sicherheit laden wird?
AkTed

Das könnte sicher eine Möglichkeit sein. Ich weiß nicht , wie das Twenty Twelve Thema ist zu bauen , da ich es nie verwenden, aber sie werden sicher ihre Gründe haben enqueueanstelle von register.
Mike Madern

2
In diesem Sinne bin ich anderer Meinung als "Sie können das Skript jedes Mal in die Warteschlange stellen, was mehr Ressourcen kostet, oder das Skript einfach in die Warteschlange stellen, wenn Sie es benötigen". In Ihrem Beispielcode können Sie den Registeraufruf entfernen und stattdessen mehrere gleichwertige vollwertige Aufrufe (mit $ src arg) ausführen wp_enqueue_style(). Dies wäre nur ein größerer Tippaufwand, würde jedoch nicht zu einem höheren Ressourcenbedarf führen. Richtig?
Jan-Philip Gehrcke,

7
Ein Punkt, der bisher in allen Erklärungen ausgelassen wurde, ist, dass Sie wp_register_script()ein Skript einfach registrieren können, damit es als Abhängigkeit für andere Skripte verwendet und nur mit diesen geladen werden kann, ohne jemals direkt in eine Warteschlange eingereiht zu werden.
JHoffmann

1
Auch wenn dies gut erklärt, würde ich empfehlen, diese Antwort ebenfalls zu lesen .
Lowtechsun

8

IMHO ist der Hauptvorteil der Verwendung wp_register_scriptvor wp_enqueue_scriptsim folgenden Absatz von Codex dargestellt :

Skripts, die mit wp_register_script () vorregistriert wurden, müssen nicht manuell mit wp_enqueue_script () in die Warteschlange gestellt werden, wenn sie als Abhängigkeit eines anderen Skripts in der Warteschlange aufgeführt sind. WordPress wird das registrierte Skript automatisch einschließen, bevor es das in die Warteschlange gestellte Skript einschließt, das das Handle des registrierten Skripts als Abhängigkeit auflistet.

Wenn Sie der Meinung sind, dass Sie dies nicht benötigen (z. B. weil Sie zu 100% sicher sind, dass Ihr Skript nicht in Abhängigkeiten verwickelt ist), können Sie wahrscheinlich direkt mit dem Skript fortfahren wp_enqueue_scripts, ohne eine Vorabversion zu erstellen wp_register_script.


2

Ich habe einige Artikel durchgesehen und bin zu folgendem Schluss gekommen. Ich denke es hilft.

  1. Das Registrieren von Skripten mit wp_register_script()ist nur das Registrieren. nicht laden. Das registrierte Skript wird erst geladen, wenn es mit in die Warteschlange gestellt wird wp_enqueue_script().
  2. Wir müssen nicht jedes Skript gleichzeitig registrieren und in die Warteschlange stellen. Wir sollten uns nur anstellen. Das Registrieren ist nicht obligatorisch, da die wp_enqueue_script()Funktion das Skript automatisch registriert.
  3. Wir müssen uns jedoch registrieren, während wir uns in einer der folgenden Situationen befinden:

    ein. Nehmen wir an, wir brauchen ein Skript, um es an mehr als einer Stelle zu laden, etwa einmal im Front-End und einmal im Back-End (Admin-Seite). Jetzt können wir das Skript nur einmal registrieren. Und dann einzeln in Front-End und Back-End einreihen. Schauen Sie, das Einreihen bedeutet das Laden. Registrieren heißt nicht laden. Falls wir es nicht registrieren, wird es automatisch so oft registriert, wie wir es in die Warteschlange stellen. Wenn wir es hingegen einmal registrieren, wird es einmal registriert, unabhängig davon, wie oft wir es in die Warteschlange stellen.

    b. Wenn wir ein Skript als Abhängigkeit von anderen Skripten verwenden möchten, müssen wir es nicht mit einer Enqueue versehen wp_enqueue_script(). Einfach bei registrieren wp_register_script(). Und es wird automatisch in die Warteschlange gestellt, wenn der Handle-Name als Abhängigkeit von anderen Skripten verwendet wird, mit denen es in die Warteschlange gestellt wird wp_enqueue_script().

    c. Wenn das Skript nicht sofort, sondern bei Bedarf geladen werden soll, können Sie es einfach für die spätere Verwendung registrieren. Der Anwendungsfall wurde oben gezeigt.

NB Soweit ich überzeugt bin, kann dieselbe Schlussfolgerung für die CSS-Stylesheets gezogen werden. Ich will damit sagen, dass wir wp_register_style()und wp_enqueue_style()auf die gleiche Weise nutzen können.

Beachten Sie, dass die hier gezogene Schlussfolgerung meinen eigenen Abzug widerspiegelt. Wenn ich falsch liege, korrigieren Sie mich bitte. Und Sie könnten zu einem anderen und viel besseren Ergebnis gekommen sein. Dann lassen Sie es uns bitte wissen. Wer weiß? Vielleicht ist deins das Beste. Wie das Sprichwort sagt: "So viele Grundsätze, so viele Wege zur Erlösung." :)

https://sxbook.blogspot.com/2018/12/wpregisterscript-when-to-use.html


Ihre Erklärung ist die beste, die ich gelesen habe. Jetzt verstehe ich, warum es wichtig ist, Skripte zu registrieren. Danke!
Jee vor
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.