Cómo incluir correctamente los efectos jquery-ui en WordPress
He estado tratando de incluir los efectos de jQuery UI (más específicamente el efecto shake) en mi tema de WordPress. Hasta ahora, solo he podido incluir el script de jQuery, pero realmente no tengo idea de dónde colocar los scripts de UI y cómo encolarlos.
Este es el código que tengo. Obviamente no funciona:
<?php wp_enqueue_script("jquery"); ?>
<?php wp_enqueue_script("jquery-ui-core"); ?>
<?php wp_head(); ?>
<link rel="stylesheet" type="text/css" href="<?php bloginfo('stylesheet_url'); ?>" />
<script type="text/javascript">
var $j = jQuery.noConflict();
$j(document).ready(function() {
$j("#manita-imagen").mouseover(function(){
//$j(this).animate({ opacity: "hide" })
// alert('asd');
$j(this).effect("shake", { times:3 }, 300);
});
});
</script>
¡Gracias por tu ayuda!

Aunque WordPress incluye las bibliotecas jQuery UI, no incluye la biblioteca UI/Effects. Esa biblioteca es separada e independiente. Necesitarás incluir una copia del archivo effects.core.js y ponerlo en cola por separado.
Ten en cuenta que debes nombrarlo jquery-effects-core al ponerlo en cola, para mantener la consistencia en los nombres.
Puedes incluirlo así:
wp_enqueue_script("jquery-effects-core",'http://example.com/whatever/effects.core.js', array('jquery'), '1.8.8');
Edición: Esta respuesta fue escrita antes de WordPress 3.3, que ahora incluye varias bibliotecas de efectos como parte del núcleo. Ahora puedes simplemente poner en cola las partes de la biblioteca de efectos que necesites usar.
La lista de slugs para estos archivos se puede encontrar en wp-includes/script-loader.php, pero el slug del núcleo es jquery-effects-core.
wp_enqueue_script("jquery-effects-core");

Ten en cuenta que para un efecto real (blind, bounce, fade, etc.) debes encolar ese efecto explícitamente. Por ejemplo, para 'fade': wp_enqueue_script( 'jquery-effects-fade' );

El usuario debería colocar su propio Javascript en un archivo separado y luego encolar ese archivo listando las dependencias que necesita. De esta manera, WordPress (y los plugins de rendimiento) sabrán el orden requerido para cargar estos scripts y los colocarán en el orden correcto en la página.

@dabito,
No estás cargando tus scripts correctamente... No llames a wp_enqueue_script()
dentro de tu archivo de plantilla del tema (parece que es header.php
). Necesitas llamar esta función desde un hook separado.
En el archivo functions.php
de tu tema, coloca el siguiente código:
function my_add_frontend_scripts() {
wp_enqueue_script('jquery');
wp_enqueue_script('jquery-ui-core');
}
add_action('wp_enqueue_scripts', 'my_add_frontend_scripts');
Si ambos scripts están registrados correctamente, esto debería cargarlos sin problemas (agregando las etiquetas <script />
apropiadas en el encabezado). Entonces tu otro código JavaScript debería funcionar.
Si quieres agregar scripts en el lado administrativo, añade tu acción a admin_enqueue_scripts
en su lugar.

No es exactamente cierto. Mientras los llame antes de la llamada wp_head(), debería funcionar bien. No necesitan estar enganchados, y no deberían estarlo a init de todos modos. Si vas a engancharlos en algún lugar, hazlo al action hook 'wp_enqueue_scripts'. Para eso está ahí.

@Otto Lo que dices suena lógico. ¿Pero tienes una explicación de por qué en el codex dice lo que escribió @EAMann - "Usa la acción init para llamar a esta función"? Y su ejemplo está tomado de ahí... http://codex.wordpress.org/Function_Reference/wp_enqueue_script

El codex es irregular en algunos lugares. La mejor acción para usar en este caso es 'wp_enqueue_scripts' para el front end, o 'admin_enqueue_scripts' en el back end. Enganchar a init funcionará, pero encolará innecesariamente el script en todo el sitio.

He actualizado mi fragmento de código en consecuencia. Originalmente era una reacción rápida basada en la referencia del Codex... usar wp_enqueue_scripts
es definitivamente la mejor manera de proceder y evita necesitar una verificación adicional con is_admin()
.

También puedes encolar todo jQuery UI directamente desde Google. Así es como lo hago yo:
wp_enqueue_script('jquery-ui', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.6/jquery-ui.min.js', array('jquery'), '1.8.6');
Y dado que jQuery está listado como dependencia para jQuery UI, no necesitas encolarlo manualmente. WordPress lo hará automáticamente por ti.

Incluso puedes cargar todas las librerías jQuery desde la CDN de Google en lugar de desde tu propio sitio.

Desaconsejaría encarecidamente cargar scripts desde fuentes externas. Lo hice durante bastante tiempo y (en raras ocasiones) ocurrió que el host estaba caído, por lo que múltiples clientes tuvieron problemas con sus páginas al mismo tiempo.

@JulianF.Weinert es un arma de doble filo, con una buena CDN significa menor latencia pero falta de control si falla. Dicho esto, si la CDN de Google cae, la mitad de Internet fallará así que la tuya no será la única. Aunque las posibilidades de que esté caída y no esté en caché en el navegador del usuario son escasas. Para la mayoría de situaciones usar una CDN es beneficioso.

Cierto. No estaba hablando de un CDN completo, que, por supuesto, estaría perfectamente bien aquí, ya que está diseñado precisamente para ese uso. Sin embargo, cargar scripts desde cualquier john-doe.com me parece un poco arriesgado

Un pequeño consejo. Cuando encolas tu script, se encola para todo el sitio incluyendo el panel de administración. Si no quieres el script en el panel de administración, puedes incluirlos solo para el sitio en el frontend.
function my_add_frontend_scripts() {
wp_enqueue_script('jquery');
wp_enqueue_script('jquery-ui-core');
}
add_action( 'wp_enqueue_scripts', 'my_add_frontend_scripts');

No deberías usar el hook init para hacer colas de scripts. Usa el hook wp_enqueue_scripts solo para el front end o el hook admin_enqueue_scripts para el back end.

No sabía que la acción wp_enqueue_scripts
es solo para el front end. Gracias :)

Pensé que podrías tener razón (a veces los nombres bajo los cuales WP registra los scripts son diferentes a los nombres estándar utilizados) pero en este caso registrar 'jquery-ui-core' debería funcionar. Está listado en http://core.trac.wordpress.org/browser/branches/3.0/wp-includes/script-loader.php#L121

Todas las respuestas aquí, aunque funcionan, técnicamente están equivocadas.
La forma correcta de incluir jquery-ui y otras librerías es añadirlas como dependencias de tu propio script.
Esto es importante, porque las herramientas de rendimiento pueden verificar estas dependencias para alterar el orden de carga de tus scripts y optimizar el sitio.
Así que, si quieres usar jquery y jquery-ui, crea tu propio archivo .js y encolalo así, con las dependencias listadas - no necesitas un comando de encolado separado para cada librería que uses:
wp_enqueue_script('your-script-handle',
plugins_url('your-script-file.js', __FILE__),
array('jquery', 'jquery-effects-core', 'jquery-ui-core')
);
Puedes encontrar una lista de todos los scripts disponibles para añadir como dependencias aquí: https://developer.wordpress.org/reference/functions/wp_enqueue_script/

Tienes razón. Usar dependencias en tus propias llamadas wp_enqueue_script es la forma correcta de incluir jquery/jquery-ui/etc. No hay necesidad de encolarlos por separado.

Y si los encolas por separado cuando tu script depende de ellos, tu script puede/va a romperse en sitios que optimizan el rendimiento - por ejemplo, si los scripts se combinan en uno solo para acelerar la carga, o si se difieren o minimizan (depende de la minificación pero el orden puede cambiar). Si no le has dicho a WordPress que tu script depende de otros scripts, no puedes garantizar el orden en el que cargarán.
