¿No puedes encolar scripts en el pie de página?

5 ene 2012, 06:58:04
Vistas: 60.3K
Votos: 11

El codex de WordPress dice:

(antigua página del codex)

$in_footer

(booleano) (opcional) Normalmente los scripts se colocan en la sección head. Si este parámetro es true el script se coloca al final del footer. Esto requiere que el tema tenga el hook wp_footer() en el lugar apropiado. Ten en cuenta que tienes que encolar tu script antes de que se ejecute wp_head, incluso si se colocará en el footer. (Nuevo en WordPress 2.8) Por defecto: false

Así que agregué true después de cada src path del script:

/**
     * 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 los scripts siguen incluyéndose en el encabezado.

¿Alguna sugerencia para arreglar esto?

0
Todas las respuestas a la pregunta 6
3
21

¿Dónde colocaste tu código?

  1. El argumento "true" va en wp_register_script();, no en wp_enqueue_script();

La función es:

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

significa

    <?php wp_enqueue_script('NombreMiScript', 'ruta/a/MiScript', 
'dependencias_MiScript', 'VersionMiScript', 'EnFooterVerdaderoOFalso'); ?>

EJEMPLO:

<?php wp_enqueue_script('mi_script', WP_CONTENT_URL . 'plugins/mi_plugin/mi_script.js', array('jquery', 'otro_script'), '1.0.0', true); ?>

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

3. Añade la acción con add_action('wp_print_scripts', 'tu_funcion');

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

<?php  
if (function_exists('cargar_mis_scripts')) {  
    function cargar_mis_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('miscript', bloginfo('template_url').'/js/miScript.js'__FILE__), array('jquery'), '1.0', true );  
        wp_enqueue_script('miscript');  
        }  
    }  
}  
add_action('init', 'cargar_mis_scripts');  
?>  

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

5 ene 2012 08:21:04
Comentarios

Gracias, ahora está funcionando, pero me di cuenta de que colocar el true ya sea en wp_enqueue o en wp-register_script funciona bien.

wyc wyc
5 ene 2012 17:43:18

@krembo99 La función wp_register_script() toma la misma cantidad de argumentos y ambas agregan al array global $wp_scripts y al subarray data. Al combinar la información incorrecta con la pésima legibilidad de tu respuesta, tengo que darte un -1 (se eliminará al rehacer).

kaiser kaiser
5 ene 2013 19:07:23

Para mí, la pieza que faltaba era que <?php wp_footer(); ?> no existía en la plantilla de la página. Después de eso, el parámetro true en wp_enqueue_script hizo su trabajo.

joehanna joehanna
22 abr 2019 04:34:23
1

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

 wp_enqueue_script(
      'replace', 
       get_template_directory_uri().'/js/jquery.ba-replacetext.min.js',
       array('jquery'), 
       '', 
       true
);
5 ene 2012 08:21:17
Comentarios

Esta es técnicamente la respuesta correcta a su pregunta según el código en la pregunta.

AndyWarren AndyWarren
15 feb 2018 22:29:52
0

Tenía el mismo problema y después de investigar un poco me faltaba esta función en mi tema personalizado:

<?php wp_footer();?>
15 oct 2018 15:21:39
2

Me gustaría simplificar la respuesta aquí... Cuando uses wp_enqueue_script o wp_register_script para cargar un script en el footer, debes asegurarte de incluir también los otros parámetros, incluso si están vacíos.

Yo estaba intentando...

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

Lo cual no funcionó como @janoChen notó. WordPress requiere

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

Así que necesitas incluir '', para los parámetros que no estés usando si quieres declarar la función inline. Por lo tanto, el siguiente código funciona como se planeó.

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

Posteriormente puedes declarar la función en formato de array como muestra @Brian Fegter.

10 sept 2014 18:33:19
Comentarios

Debes proporcionar cadenas vacías solo donde se necesiten marcadores de posición.

s_ha_dum s_ha_dum
30 sept 2015 17:59:09

¡Ah sí! Por supuesto, solo '', donde los parámetros sean obligatorios, no opcionales.

Andrew-Sepic Andrew-Sepic
1 oct 2015 21:45:41
0

Si encolas un script en el encabezado pero declaras una dependencia a un script encolado en el pie de página, WordPress moverá el script del pie de página al encabezado para que esté disponible para el/los script(s) dependiente(s).

25 mar 2015 04:24:40
0

Según la documentación oficial de WordPress (Última verificación - Mayo 2018):

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

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

  1. Siempre deberías intentar usar la función 'wp_enqueue_scripts' para una mejor compatibilidad con plugins/temas instalados.

    add_action('wp_enqueue_scripts','your_plugin_enqueue');
    
  2. Puedes encontrar más información sobre el uso en la documentación oficial aquí

       /**** wp_register_script, wp_enqueue_script, wp_dequeue_script ***
    
             *** Recomendación personal
             *  - Recomiendo encarecidamente registrar todos los scripts antes de encolarlos,
             *  nuevamente -> para una mejor compatibilidad con otros desarrolladores.
             *  :::: Por ejemplo, para que otros puedan manipular la posición
             *       de tus scripts usando el método wp_dequeue_*tipo*
             *       (wp_dequeue_script, wp_dequeue_style,...)
    
             *** Documentación Oficial
             *   $in_footer
             *      - (bool) (Opcional) Si encolar el script antes de </body> en lugar de en el <head>. Por defecto 'false'.
             *      - Valor por defecto: false
             *
             ***/
    
             // ejemplos:
    
      function your_plugin_enqueue(){
    
    
    
             wp_dequeue_script('some_script(s)'); // eliminar script conflictivo
    
             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);  // volver a encolar scripts después del tuyo para eliminar conflictos
    
             wp_enqueue_script('some_script(s)');
    
      }
    
    
      add_action('wp_enqueue_scripts','your_plugin_enqueue');
    

P.D. Si encuentras útil esta respuesta, por favor dale un '▲' (FlechaArriba), si crees que se puede mejorar, comenta debajo.

16 may 2018 11:36:41