Enqueue core jQuery dans le pied de page?

15

J'ai ceci dans mon fichier functions.php et je ne peux pas charger jQuery dans le pied de page. Le fichier includes est chargé dans le pied de page, cependant. Que dois-je faire d'autre?

function starter_scripts() {
    wp_enqueue_style( 'starter-style', get_stylesheet_uri() );

    wp_enqueue_script( 'jquery', '', '', '', true );

    wp_enqueue_script( 'includes', get_template_directory_uri() . '/js/min/includes.min.js', '', '', true );
}
add_action( 'wp_enqueue_scripts', 'starter_scripts' );
    
posée Desi 30.12.2014 - 20:44

4 réponses

18

Pour ce faire, vous devrez d’abord désenregistrer votre script jQuery, puis vous enregistrer à nouveau. Si vous utilisez jQuery fourni avec WordPress, voici la fonction que vous recherchez.

function starter_scripts() {
    wp_deregister_script( 'jquery' );
    wp_register_script( 'jquery', includes_url( '/js/jquery/jquery.js' ), false, NULL, true );
    wp_enqueue_script( 'jquery' );

    wp_enqueue_style( 'starter-style', get_stylesheet_uri() );
    wp_enqueue_script( 'includes', get_template_directory_uri() . '/js/min/includes.min.js', '', '', true );
}
add_action( 'wp_enqueue_scripts', 'starter_scripts' );

Si vous utilisez la version hébergée de jQuery sur CDN de Google, signalez-moi que je modifierai ce code pour l'URL de CDN Google.

    
réponse donnée Robert hue 30.12.2014 - 21:23
36

Voici une autre option qui vous évite de vous désinscrire et de vous réinscrire:

/**
 * Move jQuery to the footer. 
 */
function wpse_173601_enqueue_scripts() {
    wp_scripts()->add_data( 'jquery', 'group', 1 );
    wp_scripts()->add_data( 'jquery-core', 'group', 1 );
    wp_scripts()->add_data( 'jquery-migrate', 'group', 1 );
}
add_action( 'wp_enqueue_scripts', 'wpse_173601_enqueue_scripts' );

Cette solution imite le noyau WordPress en définissant group sur 1 , ce qui permet à WordPress de déterminer si un script doit figurer dans le pied de page ou non (je ne connais pas le raisonnement de 1 , comme l'a souligné @jgraup dans ses commentaires) semble un peu arbitraire).

    
réponse donnée Matthew Boynes 07.05.2016 - 16:11
16

Une meilleure solution:

add_action( 'wp_default_scripts', 'move_jquery_into_footer' );

function move_jquery_into_footer( $wp_scripts ) {

    if( is_admin() ) {
        return;
    }

    $wp_scripts->add_data( 'jquery', 'group', 1 );
    $wp_scripts->add_data( 'jquery-core', 'group', 1 );
    $wp_scripts->add_data( 'jquery-migrate', 'group', 1 );
}

J'aime ça parce que ça change au coeur même.

Si vous ne faites pas cela à l'administrateur:

Si les plugins ajoutent un jquery en ligne à wp_head, cela échouera si jquery n’est pas chargé à ce moment-là. Je vous suggère donc de l’éviter tant que des millions de personnes n’ont pas édité votre site et que vous essayez d’optimiser vos performances. C’est également le cas pour le client, vous devez donc vous méfier des thèmes ou plugins mal codés qui prennent JQuery en tête à l’aide de code jQuery intégré.

Si cela ne fonctionne pas:

Vous devez savoir que si un autre script chargé dans la tête contient jQuery dans ses dépendances, il se chargera également de charger jQuery dans la tête juste avant lui-même. Et c’est bien et prévu, la raison pour laquelle le système wp_enqueue existe.

    
réponse donnée NextGenThemes 26.09.2016 - 22:50
-3

Hé seulement changer votre code pour aimer ça

function starter_scripts() {
        wp_enqueue_style( 'starter-style', get_stylesheet_uri() );
        wp_enqueue_script('jquery');
        wp_enqueue_script( 'includes', get_template_directory_uri() . '/js/min/includes.min.js', array( 'jquery' ) );
    }
    add_action( 'wp_enqueue_scripts', 'starter_scripts' );

Je pense que cela fonctionne bien

ajoutez ces lignes dans votre fichier functions.php

remove_action('wp_head', 'wp_enqueue_scripts', 1);
add_action('wp_footer', 'wp_enqueue_scripts', 5);

puis il ajoute un script dans le pied de page

    
réponse donnée Amit Mishra 30.12.2014 - 21:05

Lire d'autres questions sur les étiquettes