Cum să folosesc filele jQuery UI într-o pagină WordPress?
Vreau să folosesc filele jQuery UI în paginile mele WordPress 3.1.4. Scriu tutoriale de programare pentru publicul VB .NET dar doresc să ofer și cod sursă în C#, iar filele ar permite cititorilor să comute între cele două. Aș putea probabil să-mi creez propriile file, dar acesta trebuia să fie un proiect de "învățare despre jQuery". S-a transformat mai mult într-un proiect "WTF WordPress". Nu sunt expert în JS și încerc să remediez asta. Nu sunt guru WordPress și nu vreau să învăț mai mult decât este necesar momentan.
Am o pagină care este doar un copy/paste din demo-ul jQuery UI Tabs. Nu funcționează; lista și toate div-urile sunt vizibile și nu apar filele reale. Știu că asta se întâmplă pentru că am nevoie de CSS, dar aici m-am blocat. Nu mai sunt sigur că doar CSS-ul ar rezolva problema și nici nu știu cum să identific dacă problema este la CSS, JS sau WordPress. Până la acest proiect, blogul meu "mergea pur și simplu" și așa îmi place să funcționeze lucrurile.
Primul lucru pe care l-am încercat a fost să adaug CDN-ul Google pentru jQuery în header.php al temei mele. Am reușit să fac alert-uri să funcționeze, dar indiferent ce am făcut, filele nu apăreau. (Acum știu că era nevoie de CSS. Mulțumesc pentru că nu ai menționat asta, documentație jQuery!) Am început să cercetez și am realizat că WordPress încarcă jQuery, la fel ca multe plugin-uri (deși eu folosesc doar Spam Karma și Akismet). Avea sens că poate încărcarea jQuery de la Google a creat confuzie. După ceva research, am găsit câteva site-uri care sugerau să folosesc wp_enqueue_script() în header. Documentația lista o serie de script-uri, așa că am adăugat "jquery", "jquery-ui-core" și "jquery-ui-tabs". Văd un tag script care încarcă jQuery (versiunea 1.4.4...) în header, dar celelalte tag-uri par să nu aibă niciun efect. Înțeleg că este încărcat în modul "no conflict" așa că folosești "jQuery()" în loc de "$()". Pot face alert-uri să funcționeze dar nu și filele. Din nou, sunt suspicios pentru că nu pare că pagina mea încearcă să încarce jQuery UI deloc. Probabil nu ar conta pentru că nu sunt sigur dacă WordPress vine cu CSS-ul potrivit. Am văzut câteva pagini care sugerează să încarc jQuery UI în footer-ul paginii, altele care susțin că trebuie să adaug niște lucruri pe care nu le înțeleg în functions.php, și alte soluții din articole prea vechi pentru a fi de încredere. Nu știu ce să mai încerc.
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
(... restul header.php implicit din 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>Conținut Tab 1.</p>
</div>
<div id="tabs-2">
<p>Conținut Tab 2</p>
</div>
<div id="tabs-3">
<p>Conținut Tab 3</p>
</div>
</div>
Am adăugat apelul ready() pentru că eram curios dacă poate codul din demo nu rulează. Am încercat și această variantă a codului fără succes:
jQuery("document").ready(function() {
jQuery( "#tabs" ).tabs();
});
Ce îmi scapă?

Răspunsul scurt este că trebuie să incluzi o "Temă" CSS jQuery UI în codul tău. Framework-ul jQuery UI este de fapt o combinație între JavaScript și CSS (și se pare că ai inclus doar partea de JavaScript).
Ca un test rapid, tocmai am aplicat tema "Base" în codul tău aici. (Observă în bara laterală, sub Manage Resources, există un link către un fișier jqueryui.css găzduit de Google).
jQuery UI are multe teme predefinite pe care le poți folosi. (Vezi fila "Gallery"). Sau poți să-ți creezi propria temă! Destul de flexibil.
Pentru a lungi puțin răspunsul... îți recomand să folosești CDN-ul Google în locul fișierelor jQuery incluse în WordPress din două motive:
- Vei primi versiuni mai noi
- Va fi mai rapid
Dar cercetarea ta este corectă... Nu vrei să incluzi pur și simplu referința CDN jQuery în header-ul tău pentru că atunci WordPress nu va ști că deja l-ai inclus! (Și vei avea conflicte cu alte plugin-uri care necesită jQuery). O soluție simplă este să adaugi următorul fragment de cod în fișierul functions.php:
// cozi personalizate de scripturi
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');
}
Acest cod practic spune WordPress-ului să ignore propria versiune de jQuery, să folosească referința pe care o ai aici și apoi să o încarce! (Acum, dacă un alt plugin "cere" jQuery prin API-ul WordPress, acesta va ști că este deja încărcat și pregătit).
Personal, nu mă îngrijorez să fac asta cu jQuery UI. Încă nu am folosit un plugin care să vrea să-l încarce în mod specific. Așa că în header.php pur și simplu l-am inclus eu, împreună cu o temă care îmi place:
<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>
Succes cu proiectul tău!

Da! Asta este! Singurul lucru care mi-a luat ceva timp să-l rezolv a fost să mă asigur că <link> și <script> pentru jQuery UI vin după wp_head(); prima mea încercare a încercat să încarce jQuery UI înainte de jQuery. Asta nu e optim. Acum tot ce trebuie să fac este să stabilesc un stil CSS; pentru moment sunt mulțumit. Mulțumesc!

WordPress are deja o mulțime de efecte de interfață. documentație
Pasul 1. Adăugați efectul în fișierul functions.php
al temei
function add_theme_scripts() {
wp_enqueue_script("jquery-ui-tabs");
}
add_action( 'wp_enqueue_scripts', 'add_theme_scripts' );
Pasul 2. Adăugați HTML-ul
<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>
Pasul 3: Adăugați scriptul în footer.php
<script>
jQuery(document).ready(function($) {
$('#tabs').tabs();
})
</script>

Poți folosi plugin-ul ThePath Tabbed Widget pentru asta: Jquery UI Tabbed Widget Wordpress Plugin

Adaugă următoarele în 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');
