Debugging WordPress 3.3 - Sustituyendo jQuery por el CDN de Google

Errores en functions.php al cargar scripts externos

Si has estado trabajando en el desarrollo de algún proyecto web basado en WordPress, es muy probable que últimamente, al activar el modo de debug (depuración de código) o echar un vistazo al log de errores, te hayas encontrado con este aviso, o alguno similar:

Notice: wp_register_script was called incorrectly. Scripts and styles should not be registered or enqueued until the wp_enqueue_scripts, admin_enqueue_scripts, or init hooks. Please see Debugging in WordPress for more information. (This message was added in version 3.3.) in …/functions.php on line 3427.

El error puede referirse tanto a wp_register_script, wp_deregister_script como a wp_enqueue_script, es decir, se produce al intentar cargar o eliminar algún archivo JavaScript en WordPress a través de estas funciones.

El caso más frecuente es cuando queremos sustituir desde functions.php la versión de jQuery que WordPress incluye en wp-includes por las librerías del CDN de Google con este código:

// Sustituimos la versión de jQuery local por la del CDN de Google
if (!is_admin()) {
	wp_deregister_script('jquery'); 
	wp_register_script('jquery', ("https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"), false, '1.7.1'); 
	wp_enqueue_script('jquery'); 
}

Solución

Para arreglar el error es necesario encapsular las llamadas a registros de scripts dentro de una función, y ejecutarla con la acción wp_enqueue_scripts. Así:

// Sustituimos la versión de jQuery local por la del CDN de Google
add_action('wp_enqueue_scripts', 'mitema_enqueue_scripts');
function mitema_enqueue_scripts() {
	wp_deregister_script('jquery');
	wp_register_script('jquery', ("https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"), false, '1.7.1');
	wp_enqueue_script('jquery');
	}

El aviso “Notice: wp_register_script was called incorrectly…” no da demasiadas pistas para arreglar el problema, por eso es importante asegurarnos de que no estamos haciendo llamadas a scripts incorrectas como las del primer ejemplo.

Depuración de código en WordPress

Como ves, es muy importante activar el modo debug y echar un vistazo a los logs del servidor mientras se está en la fase de desarrollo de una web, ya que muchas veces este tipo de errores o avisos no son fácilmente identificables, pero pueden evitarnos muchos problemas posteriores.

Para activar el modo de depuración de código (debug) en WordPress hay que abrir el archivo “wp-config.php” y cambiar la linea donde dice “define(‘WP_DEBUG’, false)” por “define(‘WP_DEBUG’, true)”.

También existen plugins relacionados con la depuración de errores PHP en WordPress, por ejemplo Simple error handler o Debug Bar, que muestra notas y avisos de PHP, consultas a la base de datos, elementos en cache, memoria utilizada, versiones de MySQL y PHP y otra información de utilidad.

Más información:

Comentarios

  1. mariano

    Despues de 3 horas encontre la solucion.

    Antes de llamar a “wp_deregister_script, wp_register_script, wp_enqueue_script”
    poner esto “$wp_scripts = new WP_Scripts();”

  2. William Pedroza

    Hola buenas tardes. Soy nuevo en ésto del WP y estoy desarrollando un proyecto desde cero (maquetado, theme, etc.) pero no logro echar a andar ningun plugin tipo “slider”, es decir, ningún efecto o nada se hace visible cuando inlcuyo los tgs o shortcodes dentro de los post o en la propia plantilla. Alguna sugerencia?

  3. Daniel

    Para montar un pase de fotos (slideshow), en vez de utilizar plugins de WordPress, yo trataría de hacerlo a mano, a partir de algún plugin de jQuery, por ejemplo, especialmente si se trata de un proyecto creado desde cero. Así tienes más control y es más fácil encontrar errores.

    Cualquiera de estos sliders debería funcionar correctamente si todo está bien configurado:

    SlidesJS
    ResponsiveSlides
    Nivo Slider (la versión jQuery gratuita)
    Backstretch
    Ideal image slider
    Unslider

Y tú qué opinas?

Las URLs se convertirán en enlaces automáticamente. Tu dirección de email no se publicará ni se utilizará para enviar ningún tipo de información. Los mensajes que no aporten nada al tema que se trata en esta entrada se borrarán. Las imágenes que aparecen al lado de cada autor utilizan el servicio de Gravatar. Recuerda que puedes usar etiquetas HTML como <a href>, <code>, <em> o <strong> en los comentarios.

(necesario)

(opcional)