web-dev-qa-db-fra.com

Enqueue core jQuery dans le pied de page?

J'ai ceci dans mon fichier functions.php et je ne peux pas charger jQuery dans le pied de page. Le fichier includes se charge toutefois dans le pied de page. 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' );
19
Desi

Pour ce faire, vous devrez d'abord annuler l'enregistrement de 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 de Google.

19
Robert hue

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 la variable group sur 1, 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 indiqué par @jgraup dans les commentaires cela semble un peu arbitraire).

39
Matthew Boynes

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 );
}

Pourquoi c'est mieux que la réponse acceptée OMI

  1. Le change au cœur même pas à un stade ultérieur où d’autres choses pourraient déjà s’être brouillé avec.
  2. La version de chaîne maintenue en place et non supprimée!
  3. Il ne désenregistre pas et ne réenregistre pas un script, il définit simplement la valeur du groupe qui est essentiellement la même que si le script était enregistré avec $footer = true.

A propos de ne pas faire cela à l'administrateur

Si les plugins ajoutent un jquery en ligne à wp_head, il é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 modifié votre site et que vous essayez d'optimiser les performances de votre administrateur. Cela vaut également pour le front-end, vous devez donc vous méfier des thèmes ou plugins mal codés qui prennent JQuery dans la tête en utilisant du code jQuery inline.

A propos, ça ne marche 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.

16
NextGenThemes
add_action("wp_enqueue_scripts", "myscripts");

function myscripts() { 
   wp_enqueue_script( 'jquery' , '', array(), true); //true for footer
   wp_enqueue_script( 'someScript-js', 'https://domain.com/someScript.js' , '', '', true );
}
0
samjco