web-dev-qa-db-fra.com

wp_register_script ne se charge pas comme prévu

Je charge des scripts comme ceci:

//load scripts
//wp_register_script( $handle, $src, $deps, $ver, $in_footer );

add_action('wp_enqueue_scripts', 'load_scripts');

function load_scripts() {

    if (!is_admin()) {

        wp_register_script('modernizr', get_bloginfo('template_directory') .'/scripts/modernizr-latest.js',false);
        wp_enqueue_script('modernizr');

        wp_enqueue_script('jquery', true );

        wp_register_script('cookie',get_bloginfo('template_directory') . '/scripts/cookie.js', array('jquery'), '1.0',true);
        wp_enqueue_script('cookie');

        wp_register_script( 'Gmaps', 'http://maps.google.com/maps/api/js?sensor=false', true );
        wp_enqueue_script ('Gmaps');

        wp_register_script('plugins', get_bloginfo('template_directory') .'/scripts/plugins.js',true);
        wp_enqueue_script('plugins');

        wp_register_script( 'maps_scripts',  get_bloginfo('template_directory') . '/scripts/maps.js', array('Gmaps'), '1.0', true );
        wp_enqueue_script ('maps_scripts');

        wp_register_script('history', get_bloginfo('template_directory') .'/scripts/history.js', array('jquery'), '1.0',true);
        wp_enqueue_script('history');


    }
}

Avec cela, je m'attends à voir tous les scripts sauf modernizr chargés dans le pied de page. Au lieu de cela, c'est un méli-mélo incorrect. Dans cet exemple, jquery, google maps et plugins.js continuent de se charger dans l'en-tête, même si $in_footer est défini sur true. Les cookies, les cartes et l'historique sont chargés dans le pied de page comme prévu.

Quelqu'un peut-il s'il vous plaît aider à expliquer cela pour moi?

2
zac

Juste une remarque avant d'entrer dans la solution, get_template_directory_uri() est préféré à get_bloginfo() car il s'agit d'une sortie filtrée. Cela dit, dans le code corrigé, je l’ai laissé tel quel, pour vous éviter de taper dans le cas où vous auriez une raison de le laisser ainsi.

Votre problème est que vous négligez certains paramètres, le paramètre avant la parenthèse n’est pas le dernier paramètre; il compte toujours à partir de la gauche. Ainsi, dans beaucoup d’entre eux, vous avez défini $ver sur true plutôt que le $in_footer sur true. De plus, vous ne devriez pas avoir besoin de mettre en file d'attente une requête, cela devrait être fait automatiquement, mais cela ne présente aucun inconvénient.

add_action( 'wp_enqueue_scripts', 'load_scripts ');

function load_scripts() {

    if ( !is_admin() ) {

        wp_enqueue_script( 'jquery' );

        wp_register_script( 'modernizr', get_bloginfo( 'template_directory' ) .'/scripts/modernizr-latest.js' );
        wp_enqueue_script( 'modernizr' );

        wp_register_script( 'cookie', get_bloginfo( 'template_directory' ) . '/scripts/cookie.js', array( 'jquery' ), '1.0', true );
        wp_enqueue_script( 'cookie' );

        wp_register_script( 'Gmaps', 'http://maps.google.com/maps/api/js?sensor=false', array(), false, true );
        wp_enqueue_script ( 'Gmaps' );

        wp_register_script( 'plugins', get_bloginfo( 'template_directory' ) .'/scripts/plugins.js', array(), false, true );
        wp_enqueue_script( 'plugins' );

        wp_register_script( 'maps_scripts',  get_bloginfo( 'template_directory' ) . '/scripts/maps.js', array( 'Gmaps' ), '1.0', true );
        wp_enqueue_script ( 'maps_scripts' );

        wp_register_script( 'history', get_bloginfo( 'template_directory' ) .'/scripts/history.js', array( 'jquery' ), '1.0', true );
        wp_enqueue_script( 'history' );


    }
}

Juste une note: ceci pourrait valoir la peine d'être lu, cela aide à uniformiser tout. Personnellement, j'essaie de tout écrire selon la norme de codage, même si ce n'est pas obligatoirement une habitude de bonne pratique.

2
mor7ifer