Vous ne pouvez pas mettre les scripts en file d'attente dans le pied de page?

10

Le codex WordPress dit :

( ancienne page du codex )

$ in_footer

(booléen) (facultatif) Normalement, les scripts sont placés dans la section. Si ce paramètre est vrai, le script est placé au bas de la. Cela nécessite que le thème ait le crochet wp_footer () à l'endroit approprié. Notez que vous devez mettre votre script en file d'attente avant l'exécution de wp_head, même s'il sera placé dans le pied de page. (Nouveau dans WordPress 2.8) Par défaut: faux

J'ai donc ajouté trueaprès chaque script src path:

/**
     * JavaScript
     */

    function my_scripts_method() {
        wp_deregister_script( 'jquery' );
        wp_register_script( 'jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js', true );
        wp_enqueue_script( 'jquery' );
    }

    add_action('wp_enqueue_scripts', 'my_scripts_method');

    function media_queries_script() {
        wp_register_script( 'mediaqueries', get_template_directory_uri() . '/js/css3-mediaqueries.js', true );
        wp_enqueue_script( 'mediaqueries' );
    }

    add_action('wp_enqueue_scripts', 'media_queries_script');

    function custom_script() {
        wp_register_script( 'custom', get_template_directory_uri() . '/js/custom.js', true );
        wp_enqueue_script( 'custom' );
    }

    add_action('wp_enqueue_scripts', 'custom_script');

    function replace_script() {
        wp_register_script( 'replace', get_template_directory_uri() . '/js/jquery.ba-replacetext.min.js', true );
        wp_enqueue_script( 'replace' );
    }

    add_action('wp_enqueue_scripts', 'replace_script');

Mais les scripts sont toujours inclus dans l'en-tête.

Des suggestions pour résoudre ce problème?

janoChen
la source

Réponses:

18

Où avez-vous mis votre code?

  1. les "vrais" arguments vont dans le wp_register_script();, pas lewp_enqueue_script() ;

les fonctions sont:

<?php wp_enqueue_script('handle', 'src', 'deps', 'ver', 'in_footer'); ?>

sens

    <?php wp_enqueue_script('NameMySccript', 'path/to/MyScript', 
'dependencies_MyScript', 'VersionMyScript', 'InfooterTrueorFalse'); ?>

PAR EXEMPLE

<?php wp_enqueue_script('my_script', WP_CONTENT_URL . 'plugins/my_plugin/my_script.js', array('jquery', 'another_script'), '1.0.0', true); ?>

  1. votre thème a-t-il <?php wp_footer(); ?> à la fin de la page?

3. ajoutez l'action avec add_action('wp_print_scripts', 'your function');

Cela étant dit, votre meilleure pratique serait:

<?php  
if (function_exists('load_my_scripts')) {  
    function load_my_scripts() {  
        if (!is_admin()) {  
        wp_deregister_script( 'jquery' );  
        wp_register_script('jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js');  
        wp_enqueue_script('jquery');  
        wp_register_script('myscript', bloginfo('template_url').'/js/myScript.js'__FILE__), array('jquery'), '1.0', true );  
        wp_enqueue_script('myscript');  
        }  
    }  
}  
add_action('init', 'load_my_scripts');  
?>  

ou add_action('wp_print_scripts', 'dl_register_js');

krembo99
la source
Merci, cela fonctionne maintenant, mais j'ai réalisé que le placement de l' trueun wp_enqueueou de l' autre wp-register_scriptfonctionne très bien.
janoChen
4
@ krembo99 Le wp_register_script()prend la même quantité d'arguments et les deux s'ajoutent au $wp_scriptstableau global et au datasous- tableau . Combiné les mauvaises informations avec la lisibilité impressionnante de votre réponse, je dois vous donner un -1 (sera supprimé lors de la reprise).
kaiser
1
Pour moi, la pièce manquante du puzzle <?php wp_footer(); ?>n'existait pas dans le modèle de page. Après cela, le trueparamètre a wp_enqueue_scriptfait son travail.
joehanna
6

Vous passez une valeur booléenne au paramètre de dépendance. Essaye ça:

 wp_enqueue_script(
      'replace', 
       get_template_directory_uri().'/js/jquery.ba-replacetext.min.js',
       array('jquery'), 
       '', 
       true
);
Brian Fegter
la source
2
C'est techniquement la bonne réponse à sa question basée sur le code de la question.
AndyWarren
4

J'ai eu le même problème et après avoir fait une recherche, il me manquait cette fonction dans mon thème personnalisé:

 <?php wp_footer();?>
ImFarhad
la source
3

J'aimerais simplifier la réponse ici. Lorsque vous utilisez wp_enqueue_script ou wp_register_script pour charger un script dans le pied de page, vous devez vous assurer d'inclure également les autres paramètres, même s'ils sont vides.

J'essayais..

wp_register_script( 'rrssb', get_stylesheet_directory_uri() . '/includes/rrssb.min.js',  true);

Ce qui n'a pas fonctionné comme @janoChen l'a remarqué. Wordpress demande

wp_enqueue_script( $handle, $src, $deps, $ver, $in_footer );

Vous devez donc inclure '',les paramètres que vous n'utilisez pas si vous souhaitez déclarer la fonction en ligne. Par conséquent, le code ci-dessous fonctionne comme prévu.

wp_register_script( 'rrssb', get_stylesheet_directory_uri() . '/includes/rrssb.min.js', '', '', true);

Par la suite, vous pouvez déclarer la fonction dans un format de type tableau comme le montre @Brian Fegter.

Andrew-ThinkUp
la source
Vous devez fournir les chaînes vides uniquement lorsque des espaces réservés sont nécessaires.
s_ha_dum
Ah oui! Bien sûr, uniquement '',lorsque des paramètres sont requis, non facultatifs.
Andrew-ThinkUp du
2

Si vous mettez en file d'attente un script dans l'en-tête mais déclarez une dépendance à un script mis en file d'attente dans le pied de page, WordPress déplace le script de pied de page vers l'en-tête pour le rendre disponible pour le ou les scripts dépendants.

user3765755
la source
1

Selon la documentation officielle de WordPress (Dernière vérification - mai 2018):

https://developer.wordpress.org/reference/functions/wp_enqueue_script/

et une expérience personnelle de plus de 7 ans.

  1. Vous devriez toujours essayer d'utiliser la fonction ' wp_enqueue_scripts ' pour une meilleure compatibilité avec les plugins / thèmes installés.

     add_action('wp_enqueue_scripts','your_plugin_enqueue');
  2. Vous pouvez en savoir plus sur l'utilisation des documents officiels ici

       /**** wp_register_script, wp_enqueue_script, wp_dequeue_script ***
    
             *** Personal recommendation
             *  - I strongly recommend registering all scripts before enqueueing,
             *  again -> for better compatibility with other developers. 
             *  :::: For example, so others could manipulate the position 
             *       of your scripts using the wp_dequeue_*type* method. 
             *       (wp_dequeue_script, wp_dequeue_style,...)
    
             *** Official Docs
             *   $in_footer
             *      - (bool) (Optional) Whether to enqueue the script before </body> instead of in the <head>. Default 'false'.
             *      - Default value: false
             *
             ***/
    
             // examples:
    
      function your_plugin_enqueue(){
    
    
    
             wp_dequeue_script('some_script(s)'); // remove conflicting script
    
             wp_register_script( $handle, $src, $deps, $ver, $in_footer=true ); 
             wp_enqueue_script($handle);
             wp_register_script('some_script(s)', $src, $deps, $ver, $in_footer=true);  // re-enqueue scripts after yours for example to elimination of conflicts
    
             wp_enqueue_script('some_script(s)');
    
      }
    
    
      add_action('wp_enqueue_scripts','your_plugin_enqueue');

PS Si vous trouvez cette réponse utile, veuillez lui donner un '▲' ( ArrowUP ), si vous pensez qu'elle peut être améliorée, veuillez commenter ci-dessous.

SergeDirect
la source