J'aimerais charger des fichiers javascript dans mon pied de page. J'ai essayé d'accomplir cela dans functions.php
comme ceci:
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');
Cependant, tous les scripts continuent de se charger dans mon en-tête.
J'ai essayé les solutions ici , ici et ici mais ils n'ont pas résolu le problème.
Idoont
<?php wp_footer(); ?>
</body>
dans mon fichier footer.php
. Aucune suggestion?
Tout d’abord, vous décrochez à init
, alors que vous voulez ajouter votre rappel sur wp_enqueue_script
.
Exemple:
add_action( 'wp_enqueue_script', function() {
wp_deregister_script( 'jquery' );
// Rest of logic
} );
Vous pouvez également utiliser la version correct utilisée par le noyau. Je sais que regarder constamment cela est fastidieux et que personne ne veut surveiller les actifs/dépendances. Heureusement, vous pouvez utiliser les informations déjà présentes dans le noyau. Il en va de même pour les dépendances nécessaires pour un actif. Exemple:
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
);
} );
Il existe également un moyen plus simple de déplacer un script déjà enregistré vers le pied de page: modifiez directement ses informations dans le registre de script. Considérez le plugin suivant (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 );
Maintenant, vous pouvez simplement attacher un tableau à filtre ci-dessus et déplacer les scripts vers le pied de page:
add_filter( 'wp_scripts.footer', function( Array $scripts ) {
return [
'jquery',
# Other scripts
];
} );
Il y a aussi plusieurs choses très étranges (mais qui fonctionnent) à noter sur votre code:
myFunction( $var = 'foo' )
. Ajoutez simplement la valeur et c'est tout.//url.tld/script.js
, le client sera en mesure de décider de la route à suivre: HTTPS vs HTTP. Cela pourrait être correct pour le code distribué (même dans ce cas, il est préférable d'extraire le protocole à l'avance et de l'utiliser), mais si vous connaissez la façon dont vous servez votre site, utilisez-le simplement. C'est plus rapide et s'il y a du HTTPS disponible, alors, pour l'amour de Dieu, utilisez-le!$_SERVER
n’est acceptable que si votre script ne sera toujours exécuté que par un client. Sur la ligne de commande, l’utilisation des données de ce tableau n’est pas fiable. Dans certains cas, cela change, dans d'autres, ce n'est pas réglé. WP a quelques solutions de rechange que vous pouvez utiliser à la place.