Wo ist der richtige Ort, um Skripte und Stile zu registrieren / in die Warteschlange zu stellen

43

Ich benutze jetzt WordPress 3.1.4. Ich bin verwirrt mit wo (welchen Haken) ich benutze:

  • zu registrieren und / oder in die Warteschlange zu stellen
  • Skripte und Stile
  • an Front- und Backends?

Fragen:

  • Welches sind die richtigen Haken?
  • Alle Front-End-Register / Enqueue-Skripte / -Stile in init?
  • Warum gibt es keine admin_print_styles-{xxx}?
JM bei der Arbeit
quelle

Antworten:

62

Warum es wichtig ist, sich richtig anzumelden und in die Warteschlange zu stellen

  • es sollte pünktlich sein - früher als das Skript / der Stil für die Ausgabe auf der Seite verfügbar ist, sonst ist es zu spät;

  • es sollte bedingt sein - andernfalls laden Sie Dinge, die Sie nicht benötigen, und verursachen Leistungs- und Funktionsprobleme. Dazu müssen Sie die WP-Umgebung zu einem späten Zeitpunkt laden.

Die drei Phasen des Prozesses

  1. register - Hier werden WP-Details zu Skript / Stil erklärt und diese Informationen werden gespeichert.

  2. enqueue - (oft zusammen mit register in einem wp_enqueue_*()Aufruf zusammengefasst) - weist WP an, der Warteschlange Skripte / Stile entsprechend ihrer Einstellungen (Abhängigkeiten, Laden von Kopf- / Fußzeilen) hinzuzufügen.

  3. print - dies geschieht, wenn WP die Warteschlange verarbeitet, versucht, etwas Spezielles für sich selbst zu laden oder wenn Sie dies explizit mit wp_print_*()function tun .

Frontend-Struktur von Funktionen und Hooks

  • wp_head()

    • wp_head

      • (1) wp_enqueue_scripts()

        wp_enqueue_scripts «Das ist was du brauchst

      • (8) wp_print_styles()

      • (9) wp_print_head_scripts()

  • wp_footer()

    • wp_footer

      • (10) wp_print_footer_scripts()

Es geht viel tiefer, aber das ist einfach und gut genug für wichtige Punkte:

  • wp_enqueue_scriptsist am besten geeignet, um Skripte und Stile im Front-End zu registrieren und in die Warteschlange zu stellen .

  • inithat nichts damit zu tun, es wird funktionieren, aber - die frühere Codex-Empfehlung, nur es zu verwenden, war falsch ;

  • Sie können jederzeit vor dem wp_print_footer_scripts()Aufruf Skripte (keine Stile) für die Fußzeile in die Warteschlange stellen .

  • wp_print_*Hooks sind NICHT für Register / Queue geeignet , sie sind Punkte im Code, wenn die Ausgabe bereits erfolgt. Sie eignen sich für die manuelle / benutzerdefinierte Skript- / Stilausgabe.

Was ist mit admin?

Nun, die Funktionalität dort ist noch komplexer, ausgefeilter und verschachtelter.

  • Für den Anfang verwenden Sie einfach admin_enqueue_scriptshook (es wird $hook_suffixglobal für bedingte Dinge übergeben ) für alles, es wird in den meisten Fällen gut funktionieren;

  • Wenn Sie etwas Komplexes benötigen, suchen Sie admin-header.phpvon dort aus nach geeigneten Haken.

Was ist mit Login?

Es gibt einen bestimmten Haken namens login_enqueue_scripts.

Rarst
quelle
Hmm in einer anderen Antwort auf eine andere Frage wurde mir empfohlen admin_print_scripts-{xxx}. Ich fand das admin_print_scriptshieß aber nicht mit -{xxx}zb. -edit.phpzum Beispiel. Wie recht ist die Antwort von Einreihen in admin_print_scripts-xxxund was empfehlen Sie stattdessen - nehme ich will scripts / Arten in einer benutzerdefinierten Post - Typ Add / Edit - Seite enthalten (für metabox)
JM bei der Arbeit
5
@JM bei der Arbeit wie oben meine persönliche Meinung - halte *print*dich von Haken fern , es sei denn, du weißt wirklich, warum du sie brauchst. Und insgesamt sind sie für den Druck bestimmt , nicht für die Warteschlange . admin_enqueue_scriptshooks übergibt eine $hook_suffixVariable, die der in diesen dynamischen Hooks verwendeten entspricht.
Rarst
$hook_suffixsieht aus wie post.php in meiner Portfolio-Seite bearbeiten, warum ist das so? Ich dachte, es wäre auch edit.php. Wie kann ich dann feststellen, ob ich ein Portfolio bearbeite / poste und keinen normalen Beitrag?
JM at Work
@JM at Works ehrlich gesagt ist diese Variable etwas unangenehm :) Im eigenen Plugin ist es einfacher, damit umzugehen ( add_*_page()Funktionsrückgabe), aber in nativen WP-Bildschirmen kann es verschiedene Dinge geben.
Rarst
Leider verschwindet das CSS, wenn ich den Hook von wp_footer in wp_enqueue_scripts oder admin_print_scripts ändere und taucht nirgendwo im Quellcode auf. Dies ist der Code, den ich verwende: add_action ('wp_enqueue_scripts', 'addCSS'); Das funktioniert NICHT, das funktioniert add_action ('wp_enqueue_scripts', 'addCSS'); außer es fügt offensichtlich das CSS der Fußzeile hinzu. Was mache ich falsch?
Talon