Dans le functions.php de mon thème, j'appelle un add_action afin d'obtenir un contrôle sur l'emplacement de chargement de jquery (dans le pied de page avec les autres scripts de mon thème).
Le problème que je rencontre est que lorsque j'utilise add_action ('wp_enqueue_scripts'), il ne semble se déclencher que si aucun plug-in n'est chargé. Cependant, la méthode add_action ('init') fonctionne dans tous les cas.
Je ne me souviens plus pourquoi, mais je pense que add_action ('wp_enqueue_scripts') est préférable 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 deuxième méthode, qui utilise add_action ('wp_enqueue_scripts'), n'est apparemment pas exécutée dans les conditions où un plug-in est présent et écrit les dépendances de script dans le thème.
Beaucoup de développeurs de plugins ne font pas les choses correctement. La méthode right consiste à connecter wp_enqueue_scripts
comme vous essayez de le faire.
Cependant, voici l'ordre des hooks dans une requête typique:
Le fait est que plusieurs développeurs ont à l'origine été invités à se connecter à init
pour la mise en file d'attente de leurs scripts. Avant, nous avions un hook wp_enqueue_script
, c’était la manière "correcte" de faire les choses, et des tutoriels perpétuant la pratique flottent toujours sur Internet, corrompant par ailleurs de bons développeurs.
Ma recommandation serait de diviser votre fonction en deux parties. Utilisez votre wp_deregister_script
/wp_register_script
sur le hook init
et utilisez le hook wp_enqueue_scripts
lorsque vous mettez en file d'attente jQuery.
Cela vous gardera dans le monde du "faire les choses correctement" pour la mise en file d'attente de vos scripts et vous aidera à vous protéger des centaines de développeurs qui "continuent à faire des erreurs" en échangeant jQuery contre votre version concaténée avant de l'ajouter à la file d'attente. .
Vous voudrez également ajouter votre hook init
avec une priorité élevée:
add_action( 'init', 'swap_out_jquery', 1 );
function swap_out_jquery() {
// ...
}
Il y a plusieurs problèmes ici, qui sont liés entre eux.
wp_enqueue_scripts
wp_enqueue_script()
, définissez le paramètre $footer
sur true
.add_action( $hook, $callback )
ne doivent être emballés dans rien; laissez-les exécuter directement à partir de functions.php
is_admin()
contrôles conditionnels dans votre rappel wp_enqueue_scripts
est trop tard . Divisez votre code de désenregistrement/enregistrement en un rappel relié à init
.get_template_directory()
plutôt que TEMPLATEPATH
Mettre tous ensemble:
<?php
function wpse55924_enqueue_scripts() {
if ( ! is_admin() ) {
// Dequeue jQuery
wp_dequeue_script( 'jquery' );
// Register/enqueue a custom script, that includes jQuery
wp_register_script( 'mythemescripts', get_template_directory_uri() . '/scripts.mythemescripts.js', false, false,true );
wp_enqueue_script( 'mythemescripts' );
}
}
add_action( 'wp_enqueue_scripts', 'wpse55924_enqueue_scripts', 99 );
Mais encore une fois: ce n'est vraiment pas la meilleure approche. Votre meilleur choix consiste simplement à supprimer les rappels de plug-ins add_action () qui annulent l'enregistrement de jQuery principal - ou à utiliser des plug-ins qui ne font pas quelque chose d'aussi téméraire que de remplacer jQuery.