Não é possível enfileirar scripts no rodapé?

10

O codex do WordPress diz :

( página antiga do codex )

$ in_footer

(booleano) (opcional) Normalmente, os scripts são colocados na seção. Se esse parâmetro for verdadeiro, o script será colocado na parte inferior do. Isso requer que o tema tenha o gancho wp_footer () no local apropriado. Observe que você precisa enfileirar seu script antes da execução do wp_head, mesmo que ele seja colocado no rodapé. (Novo no WordPress 2.8) Padrão: false

Então eu adicionei truedepois de cada 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');

Mas os scripts ainda estão sendo incluídos no cabeçalho.

Alguma sugestão para corrigir isso?

janoChen
fonte

Respostas:

18

Onde você colocou seu código?

  1. os argumentos "verdadeiros" vão no wp_register_script();, não nowp_enqueue_script() ;

as funções são:

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

significado

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

POR EXEMPLO

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

  1. seu tema tem <?php wp_footer(); ?> no final da página?

3.adicione a ação com add_action('wp_print_scripts', 'your function');

Dito isto, sua melhor prática seria:

<?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
fonte
Obrigado, está funcionando agora, mas eu percebi que colocar o truein ou wp_enqueueou wp-register_scriptfunciona muito bem.
precisa saber é o seguinte
4
@ krembo99 Ele wp_register_script()recebe a mesma quantidade de argumentos e adiciona à $wp_scriptsmatriz global e à datasub- matriz . Combinando as informações erradas com a legibilidade incrível da sua resposta, tenho que lhe dar um -1 (será removido no retrabalho).
kaiser
11
Para mim, a peça que faltava no quebra-cabeça <?php wp_footer(); ?>não existia no modelo da página. Depois disso, o trueparâmetro in wp_enqueue_scriptfez seu trabalho.
Joehanna 22/04/19
6

Você está passando um valor bool para o parâmetro de dependência. Tente o seguinte:

 wp_enqueue_script(
      'replace', 
       get_template_directory_uri().'/js/jquery.ba-replacetext.min.js',
       array('jquery'), 
       '', 
       true
);
Brian Fegter
fonte
2
Esta é tecnicamente a resposta certa para sua pergunta com base no código da pergunta.
21418 AndyWarren
4

Eu tive o mesmo problema e, depois de fazer alguma pesquisa, estava faltando essa função no meu tema personalizado:

 <?php wp_footer();?>
ImFarhad
fonte
3

Gostaria de simplificar a resposta aqui. Ao usar wp_enqueue_script ou wp_register_script para carregar um script no rodapé, você deve incluir também os outros parâmetros, mesmo que estejam em branco.

Eu estava tentando..

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

O que não funcionou como o @janoChen notou. O Wordpress exige

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

Portanto, você precisa incluir '',os parâmetros que não está usando, se quiser declarar a função inline. Portanto, o código abaixo funciona como planejado.

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

Posteriormente, você pode declarar a função em uma matriz como um formato como o @Brian Fegter shows.

Andrew-ThinkUp
fonte
Você precisa fornecer as cadeias vazias apenas nos espaços reservados.
precisa saber é o seguinte
Ah sim! Obviamente, apenas '',onde os parâmetros são necessários, não opcionais.
Andrew-ThinkUp
2

Se você enfileirar um script no cabeçalho, mas declarar uma dependência de um script enfileirado no rodapé, o WordPress moverá o script de rodapé para o cabeçalho para disponibilizá-lo aos scripts dependentes.

user3765755
fonte
1

De acordo com a documentação oficial do WordPress (Last Checked - May 2018):

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

e experiência pessoal de mais de 7 anos.

  1. Você deve sempre tentar usar a função ' wp_enqueue_scripts ' para melhor compatibilidade com os plugins / temas instalados.

     add_action('wp_enqueue_scripts','your_plugin_enqueue');
  2. Você pode encontrar mais sobre o uso oficial docs Uso aqui

       /**** 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 Se você achar útil esta resposta, dê um '▲' ( ArrowUP ); se você acha que pode ser melhorada, comente abaixo.

SergeDirect
fonte