web-dev-qa-db-fra.com

Pourquoi jQuery 2.1 ne se charge-t-il pas dans l'en-tête?

Parce que je veux utiliser jQuery 2.1 au lieu de 1.11, je dois d'abord retirer jQuery. Puis enregistrez-le avec les nouvelles valeurs. :

add_action( 'wp_enqueue_scripts', 'add_scripts' );

function add_scripts() {
    wp_deregister_script('jquery');
    wp_register_script( 'jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js', false, '2.1.0', false);
    wp_enqueue_script('jquery');
}

Selon le manuel , cela devrait charger le script dans l'en-tête. Mais c'est chargé dans le pied de page. Pourquoi donc?

Je demande parce que j'ai un plugin qui doit avoir quelque chose dans l'en-tête. Puisque jquery n’est pas chargé jusqu’au pied de page, des erreurs se produisent.

PS Si je fais ce qui suit:

    wp_deregister_script('jquery');
    wp_register_script( 'jquery-2', 'http:...');
    wp_enqueue_script('jquery-2');

WP ne chargera aucun contenu - il casse complètement. Quelqu'un at-il vécu cela?

1
Steven

En théorie, le code que vous avez écrit devrait fonctionner. Dans l'application pratique, il manque quelques bonnes pratiques qui pourraient avoir une incidence sur le fonctionnement de votre code. Il est donc préférable d'effectuer un peu de dépannage pour tout cocher dans la liste de contrôle.

En dés-enregistrant jquery, vous supprimez les javascripts jQuery Core et jQuery Migrate. Ce que vous essayez probablement de faire est probablement de désenregistrer le noyau et de conserver jQuery Migrate.

jQuery Migrate consiste en un ancien code jQuery hérité qui transfère toutes les fonctionnalités des éléments hérités sur la nouvelle version de jQuery.

Sur la même page du Codex que vous avez lié, si vous faites défiler l'écran vers le bas, vous trouverez une liste de gestionnaires de javascripts intégrés que vous pouvez désenregistrer .

En conséquence, vous devez annuler l'enregistrement jquery-core au lieu de jquery pour conserver certaines fonctionnalités intactes, ce qui inclut les plug-ins susceptibles de contenir des éléments jQuery hérités.

Vous n'avez pas besoin d'ajouter "false" au dernier argument car il est déjà faux par défaut. Je suggère également de supprimer votre protocole. Cela garantit que jQuery sera toujours servi au navigateur si vous souhaitez passer ultérieurement à https. .

Pour terminer, l’espacement de noms est très important lorsque vous codez dans un grand environnement où le code des autres personnes s’exécute avec le vôtre. add_scripts() semble un peu trop générique pour moi. Si vous écrivez votre fonction dans le fichier functions.php, essayez d’ajouter le nom de votre thème ou écrivez quelque chose de très unique pour vous assurer que la même fonction ne se heurtera pas à l’avenir. fonction provenant d'un plugin ou de quelque chose d'autre dans vos fichiers de travail.

add_action( 'wp_enqueue_scripts', 'YOURTHEMENAME_scripts' );

function YOURTHEMENAME_scripts() {
    wp_deregister_script('jquery-core');
    wp_register_script('jquery-core', '//ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js', false, '2.1.0');
    wp_enqueue_script('jquery-core');
}

Veuillez noter que l'ordre de chargement de Wordpress est le suivant:

Core -> Plugins -> Theme

Si vous essayez de retirer jQuery d'un plugin personnalisé, votre thème est peut-être en train de prendre le contrôle de la file d'attente des scripts.

Si, après tout cela, vous avez encore du Javascript dans le pied de page, il y a quelque chose d'horriblement faux dans vos fichiers header.php ou footer.php: une des raisons pour lesquelles les recrues pourraient être les emplacements des hameçons spécifiques wp_head() et wp_footer() de votre thème, " J'ai vu cela tant de fois qu'il pourrait être facilement possible.

wp_head() est un crochet qui ajoute pour vous des balises méta, la file d'attente css et la file d'attente js avec le dernier argument de drapeau défini sur "false".

wp_footer() est le crochet qui se préoccupe de vous ajouter le reste du JS avec le dernier argument de drapeau positionné sur "true" et un balisage supplémentaire généré à partir de divers plugins (et pour la barre d'administration à partir du noyau WP).

Faites une double vérification sur l'emplacement de vos fonctions de hook. Si vous avez wp_head() dans votre pied de page, cela pourrait être facilement la raison pour laquelle votre file d'attente javascript est ajoutée au pied de page.

3
MacK

Non 1: vous devez mettre votre désinscription jquery, etc. dans une fonction appelée avec le hook wp_enqueue_scripts. Fais-le comme ça:

add_action('wp_enqueue_scripts','jquery_2_loader');

function jquery_2_loader(){
//insert your jquery deregister and Register
}

Deuxième question: de nombreux plug-ins reposent sur la mise en file d'attente de jquery. Donc, si vous le désenregistrez, ces plugins ne pourront plus l'utiliser.

1
kuchenundkakao

Vous avez raison de dire que le fait de passer false à l'appel de fonction wp_register_script devrait garantir que le script est placé dans l'en-tête de la page. Avez-vous d'autres plugins susceptibles de modifier l'emplacement de vos scripts? Par exemple, des plugins tels que Autoptimize essaieront de placer "intelligemment" des scripts dans le pied de page pour accélérer le chargement lorsque cela est possible.

0
futuernorn