Dans le fichier functions.php de mon thème, j'appelle une add_action afin d'obtenir une mesure de contrôle sur l'endroit où jquery est chargé (dans le pied de page avec les autres scripts de mon thème).
Le problème que j'ai est que lorsque j'utilise add_action ('wp_enqueue_scripts'), il ne semble se déclencher que si aucun plugin n'est chargé. Cependant, la méthode add_action ('init') fonctionne dans tous les cas.
Je ne me souviens pas pourquoi, mais je crois que add_action ('wp_enqueue_scripts') est préféré dans ce cas. Si c'est vrai, comment puis-je le faire fonctionner dans tous les cas?
Dans functions.php
//if(!is_admin()){add_action('init', 'my_theme_init');} //THIS WORKS ALL THE TIME
//add_action('wp_enqueue_scripts', 'my_theme_init'); //THIS ONLY WORKS WHEN NO PLUGINS PRESENT
if(!is_admin())
{
require_once(TEMPLATEPATH . '/functions_public.php');
}
Dans functions_public.php
function my_theme_init()
{
/* PREVENT DUPLICATE COPIES OF JQUERY FROM PLUGINS
**************************************************/
wp_deregister_script('jquery');
/* LOAD THE LOCAL WORDPRESS COPY OF JQUERY AND THEME CUSTOM SCRIPTS IN THE FOOTER
***********************************************/
wp_register_script('jquery', get_bloginfo('template_directory').'/scripts.mythemescripts.js',false,false,true);
wp_enqueue_script('jquery');
}
La 2ème méthode, utilisant add_action ('wp_enqueue_scripts'), n'est apparemment pas exécutée dans des conditions où un plugin est présent qui écrit des dépendances de script dans le thème.
la source
Réponses:
Beaucoup de développeurs de plugins ne font pas les choses correctement. La bonne façon est de vous accrocher à ce
wp_enqueue_scripts
que vous essayez de faire.Cependant, voici l'ordre des hooks exécutés dans une demande typique:
Le fait est que plusieurs développeurs devaient à l'origine se connecter à la mise en
init
file d'attente de leurs scripts. Avant que nous ayons eu unwp_enqueue_script
crochet, c'était la façon "correcte" de faire les choses, et les didacticiels perpétuant la pratique flottent toujours sur Internet corrompant les bons développeurs autrement.Ma recommandation serait de diviser votre fonction en deux parties. Faites votre
wp_deregister_script
/wp_register_script
sur leinit
crochet et utilisez-lewp_enqueue_scripts
lorsque vous mettez jQuery en file d'attente.Cela vous gardera dans le monde du «bien faire» pour mettre vos scripts en file d'attente, et vous aidera à vous protéger contre les centaines de développeurs qui «font encore mal» en échangeant jQuery pour votre version concaténée avant de l'ajouter à la file d'attente .
Vous voudrez également ajouter votre
init
crochet avec une priorité élevée:la source
priority
ajout d'actions. Tout dépend de la façon dont vous voyez la priorité. Si vous souhaitez que le vôtre s'exécute "en premier", un nombre inférieur est préférable - une priorité plus élevée dans l'ordre de la file d'attente d'exécution. Mais si vous voulez que l'effet de votre fonction prenne le pas sur les autres, vous voudrez qu'elle s'exécute plus tard - donc une priorité plus élevée par "effet". Et dans ce cas, c'est probablement un nombre plus élevé que vous souhaitez. Même s'il n'y a pas grand intérêt à échanger la version RTM de jquery, comme le suggère le commentateur précédent.Il y a plusieurs problèmes ici, qui sont interdépendants.
wp_enqueue_scripts
wp_enqueue_script()
, définissez le$footer
paramètre surtrue
add_action( $hook, $callback )
appels ne doivent être enveloppés dans rien; laissez-les s'exécuter directement à partir defunctions.php
is_admin()
vérifications conditionnelles dans votre rappelwp_enqueue_scripts
est trop tard . Divisez votre code de désenregistrement / d'enregistrement en un rappel connectéinit
.get_template_directory()
plutôt queTEMPLATEPATH
Mettre tous ensemble:
Mais encore une fois: ce n'est vraiment pas la meilleure approche. Votre meilleur pari est simplement de supprimer les rappels du plugin add_action () qui désenregistrent le noyau jQuery - ou d'utiliser des plugins qui ne font pas quelque chose d'aussi imprudent que de remplacer le jQuery intégré au noyau.
la source
_doing_it_wrong()
d'appeler quelque chose qui n'est pas seulement jQuery "jQuery". Aussi: jQuery lui-même peut simplement être retiré de la file d'attente afin de s'assurer qu'il n'est pas chargé deux fois. L'wp_dequeue_script()
appel doit simplement se produire avec une priorité suffisante pour garantir que rien ne le met en file d'attente par la suite.