Cómo Vincular archivos externos de jQuery/Javascript con WordPress
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!

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.

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

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

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

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>

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.

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.

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
.

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.

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

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

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');
