WordPress : Question sur le fonctionnement de wp_register_script

Publié par Jean-Michel le

Ok, j’utilise le thème Roots pour WordPress (https://github.com/retlehs/roots), qui est en quelque sorte un thème de démarrage ou un cadre de thème.

Je suis confus quant à la façon dont il désenregistre la version WordPress chargée de jQuery et mais il l’enregistre à nouveau sans spécifier l’emplacement exact du script .

Donc dans le header.php du thème il y a ce code :

...
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
  <script>window.jQuery || document.write('<script src="<?php echo get_template_directory_uri(); ?>/js/libs/jquery-1.6.4.min.js"></script>')</script>
...

, qui me lit: ‘téléchargez le script jQuery hébergé par Google mais si, pour une raison quelconque, l’objet jQuery n’est pas présent, créez simplement un élément de script qui charge le script fourni avec le thème.

Cependant, à l’intérieur d’un fichier de thème appelé roots-cleanup.php qui est inclus dans le functions.php du thème, il y a ce code qui désenregistre le script jQuery fourni avec WordPress mais réenregistre immédiatement jQuery sans vraiment spécifier l’url du script :

...
function roots_head_cleanup() {
  ...

  // don't load jQuery through WordPress since it's linked in header.php
  if (!is_admin()) {
    wp_deregister_script('l10n');
    wp_deregister_script('jquery');
    wp_register_script('jquery', '', '', '', true);
  }
}

add_action('init', 'roots_head_cleanup');
...

Maintenant, je suis allé voir ce que dit la documentation à ce sujet et elle dit quelque chose comme : « Ce paramètre [le paramètre d’emplacement] n’est requis que lorsque WordPress ne connaît pas déjà ce script. »

Je me demande donc, en incluant les balises de script qui chargent jQuery dans le header.php, cela signifie-t-il que WordPress en est conscient en ce qui concerne l’appel de wp_register_script ? Ainsi:

wp_register_script('jquery', '', '', '', true);

Je demande car je voulais essayer cette technique mais je n’ai pas obtenu les résultats que j’espérais. À savoir, les javascripts que j’ai inclus en utilisant wp_enqueue et qui dépendaient de jQuery étaient toujours chargés même lorsque j’ai supprimé les balises de script qui les incluent dans l’en-tête, ce qui signifie que les javascripts que j’ai chargés ont échoué car aucun jQuery n’était chargé. Cela me dit également que WordPress n’est pas nécessairement au courant du script jQuery si je ne spécifie pas le paramètre d’emplacement.

Solution n°1 trouvée

Pour mémoire, c’est tout à fait la mauvaise chose à faire.

Les thèmes doivent éviter (lire jamais !) de désenregistrer les scripts jQuery enregistrés de WordPress (les plug-ins ne doivent absolument jamais le faire).

Si un thème doit désenregistrer le script jquery (pour le remplacer), il doit alors le réenregistrer correctement :

 wp_register_script( 'jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js');

C’est ici que se trouve le problème. Ce qui précède est tiré du codex. La version de jQuery ci-dessus est désormais obsolète et pourrait potentiellement casser les plug-ins. C’est pourquoi les thèmes et les plug-ins doivent éviter de remplacer la version jQuery.

Le thème ci-dessus est une merveilleuse démonstration de mauvaises pratiques. Non seulement il ne réenregistre pas correctement jQuery, mais il procède ensuite à son impression directement dans l’en-tête (quel que soit le moment où il est nécessaire).

En réponse à :

Je me demande donc, en incluant les balises de script qui chargent jQuery dans le header.php, cela signifie-t-il que WordPress en est conscient en ce qui concerne l’appel de wp_register_script ?

Non.

Je demande car je voulais essayer cette technique mais je n’ai pas obtenu les résultats que j’espérais. À savoir, les javascripts que j’ai inclus en utilisant wp_enqueue et qui dépendaient de jQuery étaient toujours chargés même lorsque j’ai supprimé les balises de script qui les incluent dans l’en-tête, ce qui signifie que les javascripts que j’ai chargés ont échoué car il n’y avait pas de chargement de jQuery

Oui, WordPress pensait que jQuery était en cours de chargement (mais en fait,  » a été transmis comme chemin d’accès au fichier – cela aurait probablement dû provoquer une erreur.). Par conséquent, vos scripts étaient toujours chargés, même lorsque jQuery n’était pas réellement chargé.

wp_register_script(et les fonctions associées) existent pour charger javascript, tout en gérant les dépendances, sans conflit. Ne pas l’utiliser, comme ce thème essaie de le faire, casse les choses.

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *