Cómo Vincular archivos externos de jQuery/Javascript con WordPress

17 ago 2010, 15:04:23
Vistas: 22.9K
Votos: 15

Estoy usando Starkers como base para mi próximo tema de WP y me he encontrado con un pequeño problema. Estaba incluyendo mi propia versión de jQuery en el archivo header.php, pero al inspeccionar mi sitio usando Firebug noté que jQuery se estaba descargando dos veces. Investigué un poco y me di cuenta de que no solo yo estaba incluyendo el archivo, sino que también lo hacía la función wp_head().

Al intentar solucionar el problema, noté un comentario en el archivo header, que originalmente proviene del tema Twenty Ten:

/* Siempre debe tener wp_head() justo antes de la etiqueta de cierre </head>
 * de su tema, o romperá muchos plugins, que
 * generalmente usan este gancho para agregar elementos a <head>, como
 * estilos, scripts y metaetiquetas
 */

Aquí está mi problema: tengo entendido que el archivo jQuery debe establecerse antes que cualquier otro archivo que quiera usarlo y que wp_head() debe ser lo último en el elemento <head>. Estoy un poco confundido ahora porque me pregunto si debería poner wp_head() en la parte superior para que el archivo jQuery incluido en WP se use para todos mis plugins, aunque dice que no lo haga.

Comenté la línea de jQuery en la función wp_head(), pero es necesaria para la página de administración, así que tuve que volver a incluirla.

¡También me gustaría usar (al menos experimentar) con la versión de jQuery del CDN de Google, pero no quiero incluirla dos veces!

Espero que entiendan lo que estoy tratando de explicar. Cualquier sugerencia sobre cómo puedo resolver este problema sería muy apreciada. También agradecería cualquier consejo sobre cómo manejan sus archivos JavaScript en el archivo header.

¡Gracias!

2
Comentarios

Esto debería renombrarse a algo como "Cómo enlazar archivos externos jQuery/Javascript con WordPress."

MikeSchinkel MikeSchinkel
17 ago 2010 23:26:47

Estoy de acuerdo, no estaba seguro de cómo llamarlo ya que no estaba muy familiarizado con el problema que tenía :-)

Ben Everard Ben Everard
18 ago 2010 12:51:29
Todas las respuestas a la pregunta 3
6

Por la redacción de tu pregunta, debes estar agregando scripts escribiendo etiquetas <script> en tu plantilla. Agrega tus propios scripts mediante wp_enqueue_script() en el archivo functions.php de tu plantilla, estableciendo adecuadamente las dependencias con jQuery, y wp_head() agregará los scripts por ti.

function my_scripts() {
    wp_enqueue_script( 'my-sweet-script', get_bloginfo('template_directory') . '/script.js', array('jquery') );
}
add_action('template_redirect', 'my_scripts');

Consulta la página del codex para más información.

17 ago 2010 15:53:01
Comentarios

Tienes razón en pensar que estoy añadiendo scripts usando la etiqueta <script>, esta es la alternativa que estaba buscando, ¡muchas gracias! :-)

Ben Everard Ben Everard
17 ago 2010 16:19:45

Si quieres añadir tu script solo en el front-end, engancha a 'template_redirect' en lugar de 'init'.

John P Bloch John P Bloch
17 ago 2010 17:08:29

Buen material, actualizaré mi respuesta. Casi sugiero envolver el enqueue en is_admin().

User User
17 ago 2010 17:35:33

Generalmente encolo los scripts en el archivo de plantilla arriba del get_header(), hacerlo en el functions.php lo encolará en cada página, lo cual puede no ser necesario. Si tengo uno global, lo encolo en header.php antes de que se llame a wp_head(). De esa manera, los encolados están donde esperarías encontrarlos en el <head>

Joe Hoyle Joe Hoyle
17 ago 2010 21:47:22

A veces es mejor agregar los scripts al final de la página. Es el último parámetro de http://codex.wordpress.org/Function_Reference/wp_enqueue_script (5to, $in_footer), configúralo como true. Un poco de información para aquellos que necesitan más control.

hakre hakre
18 ago 2010 14:55:39

get_bloginfo('template_directory') no es externo.

Brad Dalton Brad Dalton
22 jun 2014 05:01:42
Mostrar los 1 comentarios restantes
6

Te sugiero que eches un vistazo a 5 consejos para usar jQuery con WordPress. Entre otras cosas, muestra el código necesario para cargar jQuery desde la biblioteca de Google:

function my_init() {
    if (!is_admin()) {
        // comenta las siguientes dos líneas para cargar la copia local de jQuery
        wp_deregister_script('jquery');
        wp_register_script('jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js', false, '1.3.2');
        wp_enqueue_script('jquery');
    }
}
add_action('init', 'my_init');

También podrías revisar el plugin Use Google Libraries.

17 ago 2010 17:01:59
Comentarios

Esta es en realidad una mejor respuesta, ya que muestra cómo encolar la versión de jQuery desde la CDN de Google. Aunque, como sugirió John en otro lugar, si solo quieres hacer esto en el front-end, engancha a template_redirect en lugar de init.

EAMann EAMann
17 ago 2010 17:34:49

Buen punto sobre dónde se carga. Aunque en realidad, el área de administración también utiliza jQuery, ¿verdad? De cualquier manera, gracias por mostrar cómo controlarlo.

Travis Northcutt Travis Northcutt
17 ago 2010 19:56:32

Sí, acabo de encontrar el post de 5 consejos para jQuery/WP, gracias por tu respuesta :-)

Ben Everard Ben Everard
17 ago 2010 20:34:21

5 consejos para usar jQuery con WordPress -- el enlace ya no funciona.

hakre hakre
13 nov 2010 00:52:31

NOTA: El ejemplo incluye una versión "antigua" de jQuery, la versión actual de WP (3.0.1) usa jQuery 1.4.2...

t31os t31os
17 nov 2010 17:06:04

Voto positivo: Mejor respuesta porque responde la pregunta sobre cómo enlazar un archivo externo y utiliza una URL externa.

Brad Dalton Brad Dalton
22 jun 2014 05:02:49
Mostrar los 1 comentarios restantes
0

Aunque @tnorthcutt tiene razón en que deberías eliminar correctamente el jquery nativo de WP si deseas cargar el tuyo propio, es seguro que tendrás problemas cuando cargues una versión diferente de jquery a la del núcleo de WP. Tanto el núcleo como los plugins dependen de que esté presente. Por lo tanto, si no actualizas tu tema con la versión más reciente de jquery cada vez que WP se actualiza, tu sitio podría romperse.

El siguiente código asegurará que tu tema siempre cargue la versión correcta de jquery, buscando primero qué versión está utilizando WP y luego cargándola desde Google:

$wp_jquery_version = $GLOBALS['wp_scripts']->registered['jquery-core']->ver;
$jquery_version = ( $wp_jquery_version == '' ) ? '1.8.3' : $wp_jquery_version; // respaldo, por si acaso
wp_deregister_script('jquery');
wp_register_script('jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/'. $jquery_version .'/jquery.min.js', $jquery_version, false);
wp_enqueue_script('jquery');
31 oct 2016 11:27:42