wp_enqueue_script() no funciona en absoluto

23 dic 2014, 22:16:36
Vistas: 70.2K
Votos: 9

Estoy intentando encolar archivos JavaScript usando wp_enqueue_script(), pero no funciona en absoluto. Aquí está mi código:

function load_css_js() {
    wp_enqueue_style('gdgt-base', get_template_directory_uri() . '/css/gdgt-base.css');
    wp_enqueue_style('gdgt-icon', get_template_directory_uri() . '/icons/css/gdgt.css', true);
    wp_register_script('gdgt-base', get_template_directory_uri() . '/js/gdgt-base.js', array( 'jquery' ) , true);
    wp_enqueue_script('gdgt-base');
}

add_action('wp_enqueue_scripts', 'load_css_js');

Sin embargo, cuando desregistro el JavaScript predeterminado de WP y registro jQuery desde otro lugar, funciona. ¿Qué puede estar causando este problema? ¡Gracias por la ayuda!

0
Todas las respuestas a la pregunta 3
12
14

wp_enqueue_style y wp_enqueue_script aceptan muchos parámetros y es muy importante usarlos en el orden correcto, de lo contrario estas funciones fallarán.

Aquí está el conjunto completo de parámetros para cada función.

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

En tu wp_enqueue_style defines $handle, $src correctamente pero $deps como true lo cual no es correcto. Lo mismo ocurre con wp_enqueue_script.

Así que aquí está tu función corregida.

function load_css_js() {
    wp_enqueue_style( 'gdgt-base', get_template_directory_uri() . '/css/gdgt-base.css', false, NULL, 'all' );
    wp_enqueue_style( 'gdgt-icon', get_template_directory_uri() . '/icons/css/gdgt.css', false, NULL, 'all' );

    wp_register_script( 'gdgt-base', get_template_directory_uri() . '/js/gdgt-base.js', array( 'jquery' ), NULL, false );
    wp_enqueue_script( 'gdgt-base' );
}

add_action( 'wp_enqueue_scripts', 'load_css_js' );

Para más información, lee la documentación de cada función en el codex.

23 dic 2014 22:30:39
Comentarios

EDITADO: Parece que está cargando el archivo JS, pero el código en el archivo JS no funciona. (Funciona si desregistro el jQuery predeterminado). | Desafortunadamente, el código corregido no está funcionando :(

DON TOLIVER DON TOLIVER
23 dic 2014 22:37:57

Acabo de probarlo y funciona bien. Creo que en tu tema alguna otra función está sobrescribiendo la salida. Busca otras funciones wp_enqueue_scripts...

Robert hue Robert hue
23 dic 2014 22:41:57

He editado el comentario. Por favor léelo :)

DON TOLIVER DON TOLIVER
23 dic 2014 22:42:50

Ese es un tema completamente diferente sobre por qué tu código en archivos JS no funciona. La principal razón por la que el código JS no funciona con el jQuery principal pero sí con el jQuery externo podría ser que el jQuery principal se ejecuta en modo noconflict. Y tu código JS no. Necesitarás modificar tu código JS para que sea compatible con jQuery noconflict.

Robert hue Robert hue
23 dic 2014 22:46:13

La cuestión es que estoy cargando la última versión de jQuery desde http://code.jquery.com/jquery-latest.min.js y funciona. Entonces, ¿qué puede estar causando el conflicto?

DON TOLIVER DON TOLIVER
23 dic 2014 22:50:41

Aquí está la solución a tu otro problema. ¿Por qué $ para jQuery no funciona?. Convierte tu código al modo noconflict de jQuery y funcionará.

Robert hue Robert hue
23 dic 2014 22:51:00

¡Muchas gracias, Robert! Si alguien más encuentra esto, simplemente usa: (function($){ $(document).ready(function(){ //your code }); })(jQuery); :)

DON TOLIVER DON TOLIVER
23 dic 2014 22:55:15

Me alegra haber podido ayudar. :)

Robert hue Robert hue
23 dic 2014 22:57:37

Eh, tengo otra pregunta, reemplacé false con true para $in_footer pero no está funcionando. También revisé el codex y parece que hay un true en uno de sus ejemplos. Pero por alguna razón no funciona en mi caso.

DON TOLIVER DON TOLIVER
23 dic 2014 23:01:33

Normalmente eso debería funcionar, no estoy seguro de por qué no funciona en tu caso.

Robert hue Robert hue
23 dic 2014 23:08:09

Parece que estás usando el mismo handle para registrar un script y una hoja de estilos. No estoy seguro si esto es un problema o no, ya que uno es CSS y el otro es JS gdgt-base'

Brad Dalton Brad Dalton
9 jul 2015 04:01:48

Siempre puedes acostumbrarte a escribir jQuery en lugar de $ todo el tiempo, y así nunca tendrás este problema. Tampoco necesitarás hacks o closures adicionales para resolver un problema inexistente de esa forma.

mopsyd mopsyd
29 mar 2018 09:54:51
Mostrar los 7 comentarios restantes
0

Para otros despistados como yo, pensé en contribuir aquí. :-)

Acabo de pasar una hora porque había escrito array( '' ) en lugar de array() en las dependencias.

Solo para que sepan, hay una diferencia entre:

wp_enqueue_script( 'footerScript', get_stylesheet_directory_uri() . '/assets/js/appFooter.js', array( '' ), false, true );

y

wp_enqueue_script( 'footerScript', get_stylesheet_directory_uri() . '/assets/js/appFooter.js', array(), false, true );

... El primero nunca se cargará. El segundo sí lo hará. :-)

La respuesta de @Robert_Hue me llevó a mi solución.

8 ene 2019 19:43:42
0

Al registrar y encolar scripts, no necesitas llamar a wp_register_script() y wp_enqueue_script(). Solo llama a wp_enqueue_script().

La sintaxis básica de wp_enqueue_script es:

wp_enqueue_script( string $handle, string $src = '', array $deps = array(), string|bool|null $ver = false, bool $in_footer = false )


Según tu código, debería ser así:

function load_css_js() {
            wp_enqueue_style('gdgt-base-style', get_template_directory_uri() . '/css/gdgt-base.css');
            wp_enqueue_style('gdgt-icon', get_template_directory_uri() . '/icons/css/gdgt.css');
            wp_enqueue_script('gdgt-base-script', get_template_directory_uri() . '/js/gdgt-base.js', array( 'jquery' ) , '2019' true);
        }

add_action('wp_enqueue_scripts', 'load_css_js');

[visita]: https://developer.wordpress.org/reference/functions/wp_enqueue_script/
documentación para más información.

8 ene 2019 22:21:03