Cum să incluzi corect efectele jquery-ui în WordPress
Am încercat să includ efectele jquery ui (mai specific efectul shake) în tema mea WordPress. Până acum, am reușit doar să includ scriptul jQuery, dar nu am nicio idee unde să pun scripturile ui și cum să le încarc corect.
Acesta este codul pe care îl am. Evident, nu funcționează:
<?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>
Mulțumesc pentru ajutor!

Deși WordPress include bibliotecile jQuery UI, nu include biblioteca UI/Effects. Acea bibliotecă este separată și independentă. Va trebui să includeți o copie a fișierului effects.core.js și să-l încărcați separat.
Rețineți că ar trebui să-l denumiți jquery-effects-core când îl încărcați, pentru consistența denumirilor.
Puteți să-l includeți astfel:
wp_enqueue_script("jquery-effects-core",'http://example.com/whatever/effects.core.js', array('jquery'), '1.8.8');
Actualizare: Acest răspuns a fost scris înainte de WordPress 3.3, care acum include diverse biblioteci de efecte ca parte a nucleului. Acum puteți încărca pur și simplu părțile din biblioteca de efecte de care aveți nevoie.
Lista de slug-uri pentru aceste fișiere poate fi găsită în wp-includes/script-loader.php, dar slug-ul pentru nucleu este jquery-effects-core.
wp_enqueue_script("jquery-effects-core");

Țineți cont că pentru a obține un efect real (blind, bounce, fade, etc.) trebuie să încărcați explicit acel efect. De exemplu, pentru 'fade': wp_enqueue_script( 'jquery-effects-fade' );

Utilizatorul ar trebui să plaseze propriul cod Javascript într-un fișier separat și apoi să încarce acel fișier, listând dependențele necesare. În acest fel, WordPress (și plugin-urile de performanță) vor ști ordinea necesară pentru încărcarea acestor scripturi și le vor plasa în ordinea corectă pe pagină.

@dabito,
Nu încarci scripturile corect... Nu apela wp_enqueue_script()
în interiorul fișierului template al temei (se pare că este vorba de header.php
). Trebuie să apelezi această funcție dintr-un hook separat.
În fișierul functions.php
al temei tale, adaugă următorul cod:
function my_add_frontend_scripts() {
wp_enqueue_script('jquery');
wp_enqueue_script('jquery-ui-core');
}
add_action('wp_enqueue_scripts', 'my_add_frontend_scripts');
Dacă ambele scripturi sunt înregistrate corect, acest cod ar trebui să le încarce fără probleme (adăugând tag-urile <script />
corespunzătoare în header). Atunci codul tău JavaScript ar trebui să funcționeze.
Dacă dorești să adaugi scripturi pe partea de administrare, atașează acțiunea ta la admin_enqueue_scripts
în loc.

Nu este chiar adevărat. Atâta timp cât le apelează înainte de apelul wp_head(), ar trebui să funcționeze corect. Nu este necesar să fie legate de hook-uri și nici nu ar trebui să fie legate de init oricum. Dacă intenționați să le legați undeva, folosiți hook-ul de acțiune 'wp_enqueue_scripts'. Pentru asta este creat.

@Otto Ceea ce spui sună logic. Dar ai o explicație pentru faptul că în codex scrie ce a scris @EAMann - "Folosește acțiunea init pentru a apela această funcție."? Iar exemplul său este luat de acolo... http://codex.wordpress.org/Function_Reference/wp_enqueue_script

Codex-ul este neuniform în unele locuri. Cea mai bună acțiune de utilizat pentru aceasta este 'wp_enqueue_scripts' pentru partea de front-end, sau 'admin_enqueue_scripts' pentru back-end. Legarea de init va funcționa, dar va încărca inutil scriptul pe întreg site-ul.

Am actualizat fragmentul meu de cod în consecință. Inițial a fost o reacție rapidă, bazată pe referința din Codex... utilizarea wp_enqueue_scripts
este cu siguranță o abordare mai bună și evită necesitatea unei verificări suplimentare is_admin()
.

De asemenea, poți încărca întregul jQuery UI direct de la Google. Iată cum procedez eu:
wp_enqueue_script('jquery-ui', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.6/jquery-ui.min.js', array('jquery'), '1.8.6');
Și deoarece jQuery este listat ca dependență pentru jQuery UI, nu este nevoie să-l încarci manual. WordPress o va face automat pentru tine.

Poți chiar să încărci toate bibliotecile jQuery de pe CDN-ul Google în loc să le hostezi pe propriul site.

Aș recomanda cu mare putere să evitați încărcarea scripturilor din surse externe. Am făcut asta mult timp și (rar) s-a întâmplat ca gazda să fie indisponibilă, astfel încât mai mulți clienți au avut probleme cu paginile lor simultan.

@JulianF.Weinert este o sabie cu două tăișuri: un CDN bun înseamnă latență mai mică, dar lipsă de control dacă acesta eșuează. Totuși, dacă CDN-ul Google cade, jumătate din Internet va avea probleme, așa că al tău nu va fi singurul. Șansele să fie indisponibil și să nu fie deja cache-uit în browserul utilizatorului sunt mici. În majoritatea situațiilor, folosirea unui CDN este un avantaj.

Adevărat. Nu vorbeam despre un CDN complet, care, bineînțeles, ar fi perfect potrivit aici, deoarece este conceput exact pentru acest scop. Însă încărcarea scripturilor de pe orice john-doe.com mi se pare un pic riscantă, cred

Doar câteva sfaturi. Când adaugi scripturile folosind funcția de enqueue, acestea vor fi încărcate pe întregul site, inclusiv în panoul de administrare. Dacă nu dorești ca scripturile să fie încărcate în panoul de administrare, poți specifica să fie încărcate doar în partea de frontend a site-ului.
function my_add_frontend_scripts() {
wp_enqueue_script('jquery');
wp_enqueue_script('jquery-ui-core');
}
add_action( 'wp_enqueue_scripts', 'my_add_frontend_scripts');

Nu ar trebui să folosești hook-ul init pentru încărcarea resurselor. Folosește hook-ul wp_enqueue_scripts doar pentru front-end sau hook-ul admin_enqueue_scripts pentru back-end.

Nu știam că acțiunea wp_enqueue_scripts
este doar pentru front-end. Mulțumesc :)

Se pare că nu există o încărcare implicită pentru această bibliotecă jQuery (lista completă aici), așa că va trebui să înregistrați scriptul înainte de a-l adăuga în coadă.

Am crezut că ai putea avea dreptate (uneori numele sub care WP înregistrează scripturile sunt diferite de cele standard folosite) dar în acest caz, înregistrarea 'jquery-ui-core' ar trebui să funcționeze. Este listat în http://core.trac.wordpress.org/browser/branches/3.0/wp-includes/script-loader.php#L121

Toate răspunsurile de aici, deși funcționează, sunt tehnic greșite.
Modul corect de a include jquery-ui și alte biblioteci este să le adaugi ca dependințe ale propriului tău script.
Acest lucru este important, deoarece instrumentele de performanță pot verifica aceste dependințe pentru a modifica ordinea de încărcare a scripturilor și a optimiza site-ul.
Deci, dacă dorești să folosești jquery și jquery-ui, creează-ți propriul fișier .js și încarcă-l astfel, cu dependințele enumerate - nu este nevoie de o comandă separată de încărcare pentru fiecare bibliotecă pe care o folosești:
wp_enqueue_script('your-script-handle',
plugins_url('your-script-file.js', __FILE__),
array('jquery', 'jquery-effects-core', 'jquery-ui-core')
);
Poți găsi o listă cu toate scripturile disponibile pentru adăugat ca dependințe aici: https://developer.wordpress.org/reference/functions/wp_enqueue_script/

Ați înțeles corect. Folosirea dependențelor în propriile apeluri wp_enqueue_script este metoda corectă de a include jquery/jquery-ui/etc. Nu este necesar să le încărcați separat.

Și dacă le încărcați separat când scriptul dumneavoastră depinde de ele, scriptul poate/va eșua pe site-urile care optimizează performanța - de exemplu, dacă scripturile sunt combinate într-un singur script pentru a accelera încărcarea, sau dacă sunt amânate sau minimizate (depinde de minimizare, dar ordinea se poate schimba). Dacă nu ați spus WordPress că scriptul dumneavoastră depinde de alte scripturi, nu puteți garanta ordinea în care acestea se vor încărca.
