Ich möchte einige Javascript-Dateien in meine Fußzeile laden. Ich habe versucht, es in functions.php
so zu erreichen:
function my_init() {
// LOAD JQUERY
wp_deregister_script('jquery');
wp_register_script('jquery', '//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js',$deps = array(),$in_footer = true);
wp_enqueue_script('jquery');
// LOAD STUTS
wp_register_script('stuts',get_bloginfo('template_url') . '/js/spss-tutorials-custom-functions.js',$deps = array('jquery'),$in_footer = true);
wp_enqueue_script('stuts');
// CONDITIONALLY LOAD MATHJAX
wp_register_script('mathjax','//cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML',$deps = array(),$in_footer = true);
$url = explode('?', 'http://'.$_SERVER["HTTP_Host"] . $_SERVER["REQUEST_URI"]);
$ID = url_to_postid($url[0]);
$mathjax = get_post_meta($ID,'mathjax',true);
if($mathjax == 'y'){
wp_enqueue_script('mathjax');
}
}
add_action('init', 'my_init');
Alle Skripte werden jedoch weiterhin in meinem Header geladen.
Ich habe die Lösungen hier , hier und hier ausprobiert, aber sie haben das Problem nicht gelöst.
Ichtuehabe
<?php wp_footer(); ?>
</body>
in meiner footer.php
Datei. Irgendwelche Vorschläge?
Zunächst legen Sie bei init
fest, während Sie Ihren Rückruf zu wp_enqueue_script
hinzufügen möchten.
Beispiel:
add_action( 'wp_enqueue_script', function() {
wp_deregister_script( 'jquery' );
// Rest of logic
} );
Möglicherweise möchten Sie auch die korrekte Version verwenden, die der Core verwendet. Ich weiß, das ständige Anschauen ist umständlich und niemand möchte Vermögenswerte/Abhängigkeiten überwachen. Zum Glück können Sie die Informationen verwenden, die bereits im Kern vorhanden sind. Gleiches gilt für die benötigten Abhängigkeiten eines Assets. Beispiel:
add_action( 'wp_enqueue_script', function() {
$version = $GLOBALS['wp_scripts']->registered['jquery']->ver;
$protocol = 'sprintf( 'http%s://', is_ssl() ? 's' : '' );
$dependencies = $GLOBALS['wp_scripts']->registered['jquery']->deps;
wp_enqueue_script(
'jquery',
"{$protocol}cdn.example.com",
$dependencies,
$version,
TRUE
);
} );
Es gibt auch eine einfachere Möglichkeit, ein bereits registriertes Skript in die Fußzeile zu verschieben: Bearbeiten Sie die Informationen direkt in der Skriptregistrierung. Betrachten Sie das folgende Plugin (MU):
<?php
/* Plugin Name: Moves registered scripts to the footer */
add_action( 'wp_enqueue_scripts', function() {
foreach ( apply_filters( 'wp_scripts.footer', [] as $script )
$GLOBALS['wp_scripts']->add_data( $script, 'group', 1 );
}, PHP_INT_MAX -1 );
Jetzt können Sie einfach ein Array an den obigen Filter anhängen und die Skripte in die Fußzeile verschieben:
add_filter( 'wp_scripts.footer', function( Array $scripts ) {
return [
'jquery',
# Other scripts
];
} );
Es gibt auch mehrere sehr merkwürdige (aber funktionierende) Dinge an Ihrem Code zu beachten:
myFunction( $var = 'foo' )
zu verwenden. Einfach den Wert hinzufügen und fertig.//url.tld/script.js
verwenden, kann der Client die Route bestimmen: HTTPS vs HTTP. Dies kann für verteilten Code in Ordnung sein (selbst dann ist es besser, das Protokoll im Voraus abzurufen und zu verwenden). Wenn Sie jedoch wissen, wie Sie Ihre Site bedienen, verwenden Sie es einfach. Es ist schneller und wenn HTTPS verfügbar ist, dann um Himmels willen: Verwenden Sie es!$_SERVER
zu verlassen ist nur in Ordnung, wenn Ihr Skript immer nur über einen Client ausgeführt wird. In der Befehlszeile ist die Verwendung von Daten aus diesem Array nicht zuverlässig. In einigen Fällen ändert es sich, in anderen ist es nicht gesetzt. WP verfügt über einige Fallbacks, die Sie stattdessen verwenden können.