Cómo usar jQuery UI tabs en una página de WordPress

4 jul 2011, 04:44:20
Vistas: 19.6K
Votos: 2

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 ...)

la página enlazada

<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?

1
Comentarios

El núcleo admite pestañas en el diseño. Consulta el plugin para identificar el código y los estilos https://github.com/bueltge/wordpress-admin-style/ Sin embargo, debes agregar el JavaScript para cambiar entre las pestañas si prefieres este método. También es posible hacer una recarga mediante PHP.

bueltge bueltge
9 ene 2020 15:30:01
Todas las respuestas a la pregunta 5
1

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:

  1. Tendrás versiones más nuevas
  2. 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!

4 jul 2011 19:09:46
Comentarios

¡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!

User User
4 jul 2011 20:35:08
0

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>
9 ene 2020 15:24:39
0

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

24 jul 2011 13:50:36
0

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');
19 nov 2011 18:31:54
1

WordPress.org ya no permite plugins que carguen jQuery UI externo, ya que ya viene incluido con WordPress. Solo una pequeña advertencia para cualquiera que esté desarrollando un nuevo plugin.

7 jul 2013 20:37:19
Comentarios

Esto no es cierto. Reemplazar estas bibliotecas sigue siendo permitido en el frontend. Simplemente no es recomendable por buenas razones.

fuxia fuxia
7 jul 2013 20:45:02