Cómo usar jQuery UI tabs en una página de WordPress
Quiero utilizar las pestañas de jQuery UI en mis páginas de WordPress 3.1.4. Escribo tutoriales de programación para audiencia de VB .NET pero también me gusta proporcionar código fuente en C#, y quiero usar pestañas para permitir a los lectores cambiar entre ambos. Podría crear mi propia solución, pero esto se suponía que era un proyecto para "aprender cosas sobre jQuery". Está resultando ser más un proyecto de "WTF WordPress". Tengo conocimientos básicos de JS y estoy intentando mejorarlos. No soy experto en WP, y no quiero aprender más de lo necesario por ahora.
Tengo una página que es solo un copiar/pegar del demo de jQuery UI Tabs. No funciona; la lista y todos los divs son visibles y no hay pestañas reales. Sé que esto es porque necesito algo de CSS, pero aquí es donde me cansé. Ya no estoy seguro de que tener el CSS lo hará funcionar, y ni siquiera sé cómo saber si el problema es el CSS, mi JS o mi WP. Antes de este proyecto, mi blog "simplemente funcionaba" y así es como me gustan las cosas que no son trabajo.
Lo primero que intenté fue poner el CDN de Google para jQuery en el header.php de mi tema. Podía hacer que funcionaran los alerts, pero no importaba lo que hiciera, las pestañas no aparecían. (Ahora sé que esto es porque aparentemente necesitaba algo de CSS. ¡Gracias por no mencionarlo, documentación de jQuery!) Así que investigué y me di cuenta de que WP carga jQuery, al igual que muchos plugins (aunque solo tengo Spam Karma y Akismet). Tenía sentido que tal vez cargar jQuery de Google causara confusión. Después de investigar, encontré varios sitios que sugerían usar wp_enqueue_script() en mi header. La documentación listaba varios scripts, así que añadí "jquery", "jquery-ui-core" y "jquery-ui-tabs". Puedo ver una etiqueta script cargando jQuery (versión 1.4.4...) en mi header, pero las otras etiquetas parecen no tener efecto. Entiendo que se carga en modo "no conflict" así que usas "jQuery()" cuando normalmente usarías "$()". Puedo hacer que funcionen los alerts pero no las pestañas. De nuevo, sospecho porque no parece que mi página esté intentando cargar jQuery UI. Probablemente no importaría porque no estoy seguro si WP viene con el CSS correcto. He visto algunas páginas que sugieren que debo cargar jQuery UI en el footer de la página, otras que dicen que necesito añadir cosas que no entiendo a functions.php, y otras soluciones de artículos demasiado viejos para confiar. No sé qué intentar ahora.
Si trabajara para averiguar qué CSS necesito (¡gracias de nuevo, "documentación" de jQuery!) podría hacer que funcionaran las pestañas en un archivo local. En WP, uso el tema TwentyTen; mis únicas modificaciones han sido añadir los scripts de SyntaxHighlighter (que desactivaré si alguien me dice que estoy lo suficientemente cerca como para que debería funcionar y que estos podrían ser el problema). Actualicé hoy a WP 3.1.4. Aquí están los contenidos de los archivos relevantes, puedes ver el código fuente para ver cómo se ve el HTML:
header.php
<?php wp_enqueue_script("jquery"); ?>
<?php wp_enqueue_script("jquery-ui-core"); ?>
<?php wp_enqueue_script("jquery-ui-tabs"); ?>
<script type="text/javascript" src="http://www.owenpellegrin.com/blog/highlight/scripts/shCore.js"></script>
<script type="text/javascript" src="http://www.owenpellegrin.com/blog/highlight/scripts/shBrushCSharp.js"></script>
<script type="text/javascript" src="http://www.owenpellegrin.com/blog/highlight/scripts/shBrushVb.js"></script>
<script type="text/javascript" src="http://www.owenpellegrin.com/blog/highlight/scripts/shBrushXml.js"></script>
<link type="text/css" rel="stylesheet" href="http://www.owenpellegrin.com/blog/highlight/styles/shCore.css"/>
<link type="text/css" rel="stylesheet" href="http://www.owenpellegrin.com/blog/highlight/styles/shThemeDefault.css"/>
<script type="text/javascript">
SyntaxHighlighter.all();
</script>
<meta charset="<?php bloginfo( 'charset' ); ?>" />
<title><?php
(... el resto del header.php por defecto de TwentyTen ...)
<script>
jQuery("document").ready(function() {
jQuery( "#tabs" ).tabs();
});
</script>
<div id="tabs">
<ul>
<li><a href="#tabs-1">Nunc tincidunt</a></li>
<li><a href="#tabs-2">Proin dolor</a></li>
<li><a href="#tabs-3">Aenean lacinia</a></li>
</ul>
<div id="tabs-1">
<p>Contenido pestaña 1.</p>
</div>
<div id="tabs-2">
<p>Contenido pestaña 2</p>
</div>
<div id="tabs-3">
<p>Contenido pestaña 3</p>
</div>
</div>
Añadí la llamada ready() porque me preguntaba si tal vez el código del demo no se estaba ejecutando. También probé esta variante del código sin éxito:
jQuery("document").ready(function() {
jQuery( "#tabs" ).tabs();
});
¿Qué me estoy perdiendo?

La respuesta corta es que necesitas incluir un "Tema" CSS de jQuery UI con tu código. El framework jQuery UI es en realidad una combinación de JavaScript y CSS (y parece que solo has incluido el JavaScript).
Como prueba rápida, acabo de aplicar el tema "Base" a tu código aquí. (Observa en la barra lateral, bajo Manage Resources, hay un enlace a un archivo jqueryui.css alojado en Google).
jQuery UI tiene muchos temas predefinidos que puedes usar. (Mira la pestaña "Gallery"). ¡O incluso puedes crear el tuyo propio! Es bastante flexible.
Para alargar un poco mi respuesta... te recomendaría usar la CDN de Google en lugar de los archivos jQuery integrados por dos razones:
- Tendrás versiones más nuevas
- Será más rápido
Pero tu investigación es correcta... No quieres simplemente incluir la referencia a la CDN de jQuery en tu cabecera porque entonces WordPress no sabrá que ya lo has incluido. (Y tendrás conflictos con otros plugins que requieran jQuery). Una solución sencilla es añadir el siguiente fragmento de código en tu archivo functions.php:
// colas de scripts personalizados
if (!is_admin()) {
wp_deregister_script('jquery');
wp_register_script('jquery', ("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"), false);
wp_enqueue_script('jquery');
}
Este código básicamente le dice a WordPress que ignore su propia versión de jQuery, use la referencia que tienes aquí, ¡y luego la pone en cola! (Ahora, si otro plugin "solicita" jQuery a través de la API de WordPress, sabrá que ya está cargado y listo para usar).
Personalmente, no me preocupo por hacer esto con jQuery UI. Todavía no he usado un plugin que específicamente quiera ponerlo en cola por sí mismo. Así que en mi header.php simplemente lo incluyo yo mismo, junto con un tema que me gusta:
<link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.13/themes/cupertino/jquery-ui.css"/>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.13/jquery-ui.min.js"></script>
¡Buena suerte con tu proyecto!

¡Sí! ¡Esto es! Lo único que me tomó un minuto resolver fue asegurarme de que los <link> y <script> para jQuery UI vinieran después de wp_head(); mi primer intento cargaba jQuery UI antes que jQuery. Eso no es óptimo. Ahora solo me queda definir algunos estilos CSS; por ahora estoy contento. ¡Gracias!

WordPress ya tiene muchos efectos de interfaz de usuario. documentación
Paso 1. Añadir el efecto al archivo functions.php
del tema
function add_theme_scripts() {
wp_enqueue_script("jquery-ui-tabs");
}
add_action( 'wp_enqueue_scripts', 'add_theme_scripts' );
Paso 2. Añadir el HTML
<div id="tabs">
<ul>
<li><a href="#tabs-1">Nunc tincidunt</a></li>
<li><a href="#tabs-2">Proin dolor</a></li>
<li><a href="#tabs-3">Aenean lacinia</a></li>
</ul>
<div id="tabs-1">
<p>Pestaña 1</p>
</div>
<div id="tabs-2">
<p>Pestaña 2</p>
</div>
<div id="tabs-3">
<p>Pestaña 3</p>
</div>
</div>
Paso 3: Añadir el script al footer.php
<script>
jQuery(document).ready(function($) {
$('#tabs').tabs();
})
</script>

Podrías usar el plugin ThePath Tabbed Widget para esto: Plugin Jquery UI Tabbed Widget para Wordpress

Añade lo siguiente en functions-user.php
function my_scripts_method() {
// Desregistra el script de jQuery por defecto
wp_deregister_script( 'jquery' );
// Registra la versión 1.6 de jQuery desde Google CDN
wp_register_script( 'jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js');
// Carga jQuery
wp_enqueue_script( 'jquery' );
// Desregistra jquery-ui-core por defecto
wp_deregister_script( 'jquery-ui-core' );
// Registra jquery-ui-core 1.8.13 desde Google CDN
wp_register_script( 'jquery-ui-core', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.13/jquery-ui.min.js');
// Carga jquery-ui-core
wp_enqueue_script( 'jquery-ui-core' );
}
// Engancha la función al action wp_enqueue_scripts
add_action('wp_enqueue_scripts', 'my_scripts_method');
function my_stylesheets_method(){
// Registra la hoja de estilos del tema Cupertino para jQuery UI
wp_register_style('myStyleSheets', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.13/themes/cupertino/jquery-ui.css');
// Carga la hoja de estilos
wp_enqueue_style( 'myStyleSheets');
}
// Engancha la función al action wp_print_styles
add_action('wp_print_styles', 'my_stylesheets_method');
