Aus Effizienzgründen versuchen wir, einige JS-Skripte nur mit einer bestimmten Seitenvorlage eines Themas zu verknüpfen, das ein Formular enthalten soll: page-with-form.php
In der Theme functions.php haben wir eine init_method als solche definiert:
function my_init_method(){
$dir = get_bloginfo('stylesheet_directory')."/js/jquery.js";
wp_deregister_script('jquery');
wp_register_script('jquery',$dir);
wp_enqueue_script('jquery');
$dir = get_bloginfo('stylesheet_directory')."/js/jquery.validate.min.js";
wp_deregister_script('jquery.validate.min');
wp_register_script('jquery.validate',$dir);
wp_enqueue_script('jquery.validate.min');
$dir = get_bloginfo('stylesheet_directory')."/js/funcion.js";
wp_deregister_script('funcion');
wp_register_script('funcion',$dir);
wp_enqueue_script('funcion');
}
Wir haben dann erwartet, dass wir einfach in der ersten Zeile der Seitenvorlage page-with-form.php (vor get_header ()) hinzufügen können:
add_action('init', 'my_init_method');
- Ist das nicht möglich
- Müssen wir der Funktion functions.php eine if-Regel hinzufügen, um festzustellen, dass wir uns auf dieser Seite befinden?
Codeänderungen basierend auf Antworten: Laden Sie auf der Seitenvorlage die Funktion direkt, ohne dass add_action ("init" ...
my_init_method();
...
get_header();
wp-enqueue-script
actions
luison
quelle
quelle
is_page_template()
anstelle vonis_page()
...Antworten:
init
ist viel früher als das Laden von Seitenvorlagen und kein geeigneter Ort für Warteschlangen (trotz vieler Tutorials und Dokumente, die es dafür verwenden).Schließen Sie Ihre Funktion an
wp_enqueue_scripts
und stellen Sie sicher, dass Sie diese Verbindung herstellen, bevor Siewp_head()
die Vorlage aufrufen.quelle
wp_enqueue_scripts
.is_page_template()
innerhalb des Rückrufs aufrufenwp_enqueue_scripts
und den korrekten Rückgabewert (wahr / falsch) erhalten können, wobei als init zu früh gewesen wäre, um aufzurufenis_page_template()
oder dergleichen. Nur zu klären, falls es nicht klar ist.wp_enqueue_scripts
Codex-Eintrag heute aktualisieren , ungefähr zu der Zeit, als diese schlechten Beispiele ersetzt wurden (da dies die Benutzer dazu ermutigt, sich bei init in die Warteschlange zu stellen).Zusätzlich zur Verwendung des richtigen Hooks (wie von @Rarst hervorgehoben) müssen Sie Ihren Funktionscode nach verschieben
functions.php
und den Funktionsinhalt in eineif ( is_page( 'page-with-form' ) )
Bedingung einschließen .quelle
functions.php
nicht wirklich erforderlich. Wenn es bequemer ist, dies in der Vorlage zu behalten, gibt es kein Problem damit.functions.php
.functions.php
, sie wollen nur Haken Richtlinie Vorlage (die nur gut für mich ist).add_action()
Aufruf in der Vorlagendatei befindet . das ist derjenige, zu dem verschoben werden solltefunctions.php
. Aber selbst bei der technischen Nuance von WRT wird die Vorlage an einem anderen Punkt in der Ausführung geladen als beimfunctions.php
Laden, sodass das Hinzufügen vonadd_action()
Aufrufen in der Vorlagendatei aus technischer Sicht möglicherweise nicht funktioniert , je nachdem, welcher Hook aufgerufen wird.add_action()
muss sein infunctions.php
. Obwohl es gängige (und bewährte) Praxis ist, ist es nicht immer möglich / wünschenswert / einfach, alle Adds zentral zu haben. Ich erwähnte in meiner Antwort, dass es vor demwp_head()
Anruf gestellt werden sollte, wenn es in der Vorlage aufbewahrt wird.Beim Laden Ihrer Vorlagendatei haben Sie den
'template_redirect'
zu späten Hook bereits übergeben (siehe: Plugin / Action API-Referenz ).Sie müssen den
add_action
Aufruf in Ihrer Datei functions.php festlegen , die vor demafter_setup_theme
Hook geladen wird. Dies ist der erste verfügbare Hook für Themen.quelle