Come utilizzare jQuery UI tabs in una pagina WordPress?

4 lug 2011, 04:44:20
Visualizzazioni: 19.6K
Voti: 2

Voglio utilizzare le schede jQuery UI nelle mie pagine WordPress 3.1.4. Scrivo tutorial di programmazione per un pubblico VB .NET ma mi piace fornire anche il codice sorgente in C#, e vorrei usare le schede per permettere ai lettori di passare tra i due. Probabilmente potrei crearle da solo dato il tempo, ma questo doveva essere un progetto per "imparare cose su jQuery". Si sta rivelando più un progetto "WTF WordPress". Sono appena funzionale in JS e sto cercando di migliorare. Non sono un guru di WP, e non voglio imparare più di quello che mi serve al momento.

Ho una pagina che non è altro che un copia/incolla della demo di jQuery UI Tabs. Non funziona; la lista e tutti i div sono visibili e non ci sono vere e proprie schede. So che questo è perché ho bisogno di qualche CSS, ma è qui che mi sono esaurito. Non sono più sicuro che avere il CSS lo farebbe funzionare, e non so nemmeno come capire se è il CSS, il mio JS o il mio WP il problema. Fino a quando non ho iniziato questo progetto il mio blog "funzionava e basta" ed è così che mi piacciono le cose non-lavoro.

La prima cosa che ho provato è stata mettere il CDN di Google per jQuery nel mio header.php del tema. Potevo far funzionare gli alert, ma qualsiasi cosa facessi le schede non comparivano. (Ora so che è perché apparentemente avevo bisogno di qualche CSS. Grazie per non menzionarlo, documentazione jQuery!) Così ho iniziato a fare qualche ricerca e ho capito che WP carica jQuery, come molti plugin (anche se sto usando solo Spam Karma e Askimet.) Aveva senso che forse caricare il jQuery di Google causasse qualche confusione. Dopo qualche ricerca, ho trovato diversi siti che suggerivano di mettere wp_enqueue_script() nel mio header. La documentazione elencava un sacco di script, così ho aggiunto "jquery", "jquery-ui-core", e "jquery-ui-tabs". Posso vedere un tag script che carica jQuery (versione 1.4.4...) nel mio header, ma gli altri tag sembrano non avere effetto. Capisco che è caricato in modalità "no conflict" quindi usi "jQuery()" quando normalmente useresti "$()". Posso far funzionare gli alert ma non le schede. Di nuovo, sono sospettoso perché non sembra che la mia pagina stia cercando di caricare jQuery UI. Probabilmente non importerebbe perché non sono sicuro che WP abbia il CSS giusto. Ho visto alcune pagine che suggeriscono di dover caricare jQuery UI nel footer della pagina, altre che dicono che devo aggiungere alcune cose che non capisco a functions.php, e un paio di altre soluzioni da articoli troppo vecchi per fidarsi. Non so cosa provare dopo.

Se facessi qualche lavoro per capire di quale CSS ho bisogno (grazie ancora, "documentazione" jQuery!) potrei far funzionare le schede su un file locale. In WP, sto usando il tema TwentyTen; le mie uniche modifiche sono state aggiungere gli script di SyntaxHighlighter (che disabiliterò se qualcuno mi dice che sono abbastanza vicino da farle funzionare e che potrebbero essere il problema). Ho appena aggiornato a WP 3.1.4 oggi. Ecco il contenuto dei file rilevanti, puoi vedere il sorgente per vedere come appare l'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
(... il resto del default header.php di TwentyTen ...)

la pagina collegata

<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>Contenuto scheda 1.</p>
    </div>
    <div id="tabs-2">
        <p>Contenuto scheda 2</p>
    </div>
    <div id="tabs-3">
        <p>Contenuto scheda 3</p>
    </div>
</div>

Ho aggiunto la chiamata ready() perché ero curioso se forse il codice della demo non stesse eseguendo. Ho anche provato questa variante del codice senza successo:

jQuery("document").ready(function() {
    jQuery( "#tabs" ).tabs();
});

Cosa mi manca?

1
Commenti

Il core supporta le tab nella progettazione. Vedi il plugin per identificare il codice e gli stili https://github.com/bueltge/wordpress-admin-style/ Tuttavia, devi aggiungere il JavaScript per passare da una tab all'altra se preferisci questo approccio. È anche possibile implementare un ricaricamento tramite PHP.

bueltge bueltge
9 gen 2020 15:30:01
Tutte le risposte alla domanda 5
1

La risposta breve è che devi includere un "Tema" CSS di jQuery UI con il tuo codice. Il framework jQuery UI è in realtà una combinazione di JavaScript e CSS (e sembra che tu abbia incluso solo il JavaScript).

Come test rapido, ho applicato il tema "Base" al tuo codice qui. (Nota nella barra laterale, sotto Gestisci Risorse, c'è un link a un file jqueryui.css ospitato da Google).

jQuery UI ha molti temi predefiniti che puoi usare. (Vedi la scheda "Galleria"). Oppure puoi crearne uno tuo! Abbastanza flessibile.

Per allungare un po' la mia risposta... ti consiglio di usare il CDN di Google invece dei file jQuery integrati per due motivi.

  1. Otterrai versioni più recenti
  2. Sarà più veloce

Ma la tua ricerca è corretta... Non vuoi semplicemente includere il riferimento al CDN di jQuery nel tuo header perché così WordPress non saprà che l'hai già incluso! (E avrai conflitti con altri plugin che richiedono jQuery). Una soluzione semplice è aggiungere il seguente snippet di codice nel tuo file functions.php:

// code per le code di script personalizzati
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');
}

Questo codice dice fondamentalmente a WordPress di ignorare la sua versione di jQuery, usare il riferimento che hai qui, e poi di metterlo in coda! (Ora se un altro plugin "richiede" jQuery tramite l'API di WordPress, saprà che è già caricato e pronto all'uso).

Personalmente, non mi preoccupo di fare questo con jQuery UI. Non ho ancora usato un plugin che voglia specificamente metterlo in coda da solo. Quindi nel mio header.php l'ho semplicemente incluso da solo, insieme a un tema che mi piace:

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

Buona fortuna con il tuo progetto!

4 lug 2011 19:09:46
Commenti

Sì! Ecco fatto! L'unica cosa che mi ha richiesto un po' di tempo per sistemare è stato assicurarmi che i tag <link> e <script> per jQuery UI venissero dopo wp_head(); il mio primo tentativo cercava di caricare jQuery UI prima di jQuery. Non è l'ideale. Ora non mi resta che decidere lo stile CSS; per il momento sono soddisfatto. Grazie!

User User
4 lug 2011 20:35:08
0

WordPress offre già molti effetti per l'interfaccia utente. documentazione

Passo 1. Aggiungi l'effetto al file functions.php del tema

function add_theme_scripts() {
    wp_enqueue_script("jquery-ui-tabs");
}
add_action( 'wp_enqueue_scripts', 'add_theme_scripts' );

Passo 2. Aggiungi l'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>Tab 1</p>
  </div>
  <div id="tabs-2">
    <p>Tab 2</p>
  </div>
  <div id="tabs-3">
    <p>Tab 3</p>
  </div>
</div>

Passo 3: Aggiungi lo script al footer.php

<script>
jQuery(document).ready(function($) {
    $('#tabs').tabs();
})    
</script>
9 gen 2020 15:24:39
0

Puoi utilizzare il plugin ThePath Tabbed Widget per questo: Plugin Wordpress per Widget a Schede Jquery UI

24 lug 2011 13:50:36
0

Aggiungi il seguente codice in functions-user.php

function my_scripts_method() {
    wp_deregister_script( 'jquery' );
    wp_register_script( 'jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js');
    wp_enqueue_script( 'jquery' );

    wp_deregister_script( 'jquery-ui-core' );
    wp_register_script( 'jquery-ui-core', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.13/jquery-ui.min.js');
    wp_enqueue_script( 'jquery-ui-core' );
}    

add_action('wp_enqueue_scripts', 'my_scripts_method');


function my_stylesheets_method(){
    wp_register_style('myStyleSheets', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.13/themes/cupertino/jquery-ui.css');
    wp_enqueue_style( 'myStyleSheets');
}
add_action('wp_print_styles', 'my_stylesheets_method');
19 nov 2011 18:31:54
1

Wordpress.org non consente più i plugin che caricano jQuery UI esternamente, poiché è già incluso in WordPress. Un piccolo avviso per chi sviluppa nuovi plugin.

7 lug 2013 20:37:19
Commenti

Non è vero. Sostituire queste librerie è ancora consentito sul frontend. Semplicemente non è raccomandato per buone ragioni.

fuxia fuxia
7 lug 2013 20:45:02