¿No puede poner en cola los scripts en el pie de página?

10

El códice de WordPress dice :

( antigua página del códice )

$ in_footer

(booleano) (opcional) Normalmente, los scripts se colocan en la sección. Si este parámetro es verdadero, el script se coloca en la parte inferior de. Esto requiere que el tema tenga el gancho wp_footer () en el lugar apropiado. Tenga en cuenta que debe poner en cola su script antes de ejecutar wp_head, incluso si se colocará en el pie de página. (Nuevo en WordPress 2.8) Valor predeterminado: falso

Entonces agregué truedespués 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');

Pero las secuencias de comandos todavía se incluyen en el encabezado.

¿Alguna sugerencia para arreglar eso?

janoChen
fuente

Respuestas:

18

¿Dónde pusiste tu código?

  1. los argumentos "verdaderos" van en el wp_register_script();, no en elwp_enqueue_script() ;

las funciones son:

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

sentido

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

P.EJ

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

  1. ¿Su tema tiene <?php wp_footer(); ?> al final de la página?

3.agregue la acción con add_action('wp_print_scripts', 'your function');

Dicho esto, su mejor práctica sería:

<?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');  
?>  

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

krembo99
fuente
Gracias, está funcionando ahora, pero me di cuenta de que colocarlo trueen wp_enqueueo wp-register_scriptfunciona bien.
janoChen
44
@ krembo99 El wp_register_script()toma la misma cantidad de argumentos y ambos se suman a la $wp_scriptsmatriz global y aldata submatriz. Combiné la información incorrecta con la horrible legibilidad de su respuesta, tengo que darle un -1 (se eliminará en el reproceso).
kaiser
1
Para mí, la pieza faltante del rompecabezas <?php wp_footer(); ?>no existía en la plantilla de página. Después de eso, el trueparámetro en wp_enqueue_scripthizo su trabajo.
joehanna
6

Está pasando un valor bool al parámetro de dependencia. Prueba esto:

 wp_enqueue_script(
      'replace', 
       get_template_directory_uri().'/js/jquery.ba-replacetext.min.js',
       array('jquery'), 
       '', 
       true
);
Brian Fegter
fuente
2
Esta es técnicamente la respuesta correcta para su pregunta basada en el código de la pregunta.
AndyWarren
4

Tuve el mismo problema y después de hacer una búsqueda me faltaba esta función en mi tema personalizado:

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

Me gustaría simplificar la respuesta aquí. Cuando use wp_enqueue_script o wp_register_script para cargar un script en el pie de página, debe asegurarse de incluir también los otros parámetros, incluso si están en blanco.

Estaba intentando..

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

Lo que no funcionó como @janoChen lo ha notado. Wordpress pide

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

Por lo tanto, debe incluir '',los parámetros que no está utilizando si desea declarar la función en línea. Por lo tanto, el siguiente código funciona según lo planeado.

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

Posteriormente, puede declarar la función en un formato similar a una matriz como muestra @Brian Fegter.

Andrew-ThinkUp
fuente
Debe proporcionar las cadenas vacías solo donde se necesitan marcadores de posición.
s_ha_dum
¡Ah, sí! Por supuesto, solo '',donde se requieren parámetros, no opcional.
Andrew-ThinkUp
2

Si coloca una secuencia de comandos en el encabezado pero declara una dependencia a una secuencia de comandos en cola al pie de página, WordPress moverá la secuencia de comandos de pie de página al encabezado para que esté disponible para los scripts dependientes.

usuario3765755
fuente
1

De acuerdo con la documentación oficial de WordPress (Última comprobación - mayo de 2018):

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

y experiencia personal de más de 7 años.

  1. Debe intentar usar siempre la función ' wp_enqueue_scripts ' para una mejor compatibilidad con los complementos / temas instalados.

     add_action('wp_enqueue_scripts','your_plugin_enqueue');
  2. Puede encontrar más información sobre el uso de documentos oficiales Uso aquí

       /**** 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');

PD: Si encuentra útil esta respuesta, dele un '▲' ( ArrowUP ), si cree que se puede mejorar, comente a continuación.

SergeDirect
fuente