wp_enqueue_script() no funciona en absoluto
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!
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.
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
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
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
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
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
¡Muchas gracias, Robert! Si alguien más encuentra esto, simplemente usa: (function($){
$(document).ready(function(){
//your code
});
})(jQuery); :)
DON TOLIVER
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
Normalmente eso debería funcionar, no estoy seguro de por qué no funciona en tu caso.
Robert hue
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
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.
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.