Come includere correttamente gli effetti jquery-ui su WordPress
Ho provato a includere gli effetti jquery ui (più specificamente l'effetto shake) nel mio tema wordpress. Finora, sono riuscito solo a includere lo script jQuery, ma non ho idea di dove posizionare gli script ui e come metterli in coda.
Questo è il codice che ho. Ovviamente non funziona:
<?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>
Grazie per il vostro aiuto!

Anche se WordPress include le librerie jQuery UI, non include la libreria UI/Effects. Questa libreria è separata e autonoma. Dovrai includere una copia del file effects.core.js e accodarlo separatamente.
Nota che dovresti nominarlo jquery-effects-core quando lo accodi, per coerenza nella denominazione.
Puoi includerlo in questo modo:
wp_enqueue_script("jquery-effects-core",'http://example.com/whatever/effects.core.js', array('jquery'), '1.8.8');
Modifica: Questa risposta è stata scritta prima di WordPress 3.3, che ora include le varie librerie degli effetti come parte del core. Ora puoi semplicemente accodare le parti della libreria degli effetti che ti servono.
L'elenco degli slug per questi file può essere trovato in wp-includes/script-loader.php, ma lo slug del core è jquery-effects-core.
wp_enqueue_script("jquery-effects-core");

Tieni presente che per ottenere un effetto reale (blind, bounce, fade, ecc.) devi caricare esplicitamente quell'effetto. Ad esempio per 'fade': wp_enqueue_script( 'jquery-effects-fade' );

L'utente dovrebbe inserire il proprio Javascript in un file separato e poi caricare quel file elencando le dipendenze necessarie. In questo modo, WordPress (e i plugin per le performance) conoscono l'ordine richiesto per caricare questi script e li posizioneranno nell'ordine corretto nella pagina.

@dabito,
Non stai caricando correttamente i tuoi script... Non chiamare wp_enqueue_script()
all'interno del file template del tuo tema (sembra che sia header.php
). Devi chiamare questa funzione da un hook separato.
Nel file functions.php
del tuo tema, inserisci il seguente codice:
function my_add_frontend_scripts() {
wp_enqueue_script('jquery');
wp_enqueue_script('jquery-ui-core');
}
add_action('wp_enqueue_scripts', 'my_add_frontend_scripts');
Se entrambi gli script sono registrati correttamente, questo dovrebbe caricarli senza problemi (aggiungendo i relativi tag <script />
nell'header). A quel punto il tuo altro codice JavaScript dovrebbe funzionare.
Se vuoi aggiungere script nella parte admin, aggiungi la tua azione a admin_enqueue_scripts
invece.

Non esattamente vero. Finché li chiama prima di wp_head(), dovrebbe funzionare bene. Non devono essere agganciati, e comunque non dovrebbero essere agganciati a init. Se vuoi agganciarli da qualche parte, usa l'action hook 'wp_enqueue_scripts'. È proprio quello lo scopo per cui esiste.

@Otto Quello che dici sembra logico. Ma hai una spiegazione del perché nel codex dice quello che ha scritto @EAMann - "Usa l'azione init per chiamare questa funzione"? E il suo esempio è preso da lì... http://codex.wordpress.org/Function_Reference/wp_enqueue_script

Il codex è approssimativo in alcuni punti. L'azione migliore da usare per questo è 'wp_enqueue_scripts' per il front end, o 'admin_enqueue_scripts' per il back end. Agganciarsi a init funziona, ma comporta l'enqueue inutile dello script su tutto il sito.

Ho aggiornato il mio snippet di codice di conseguenza. Originariamente era una reazione rapida basata sulla reference del Codex... usare wp_enqueue_scripts
è sicuramente la strada migliore da percorrere ed evita di richiedere un ulteriore controllo is_admin()
.

Puoi anche caricare l'intera libreria jQuery UI direttamente da Google. Ecco come lo faccio io:
wp_enqueue_script('jquery-ui', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.6/jquery-ui.min.js', array('jquery'), '1.8.6');
E dato che jQuery è elencato come dipendenza per jQuery UI, non è necessario caricarlo manualmente. WordPress lo farà automaticamente per te.

Puoi persino caricare tutte le librerie jQuery dal CDN di Google invece che dal tuo sito.

Sconsiglio vivamente di caricare script da fonti esterne. L'ho fatto per molto tempo e (raramente) è capitato che l'host fosse down, quindi più clienti hanno avuto problemi con le loro pagine contemporaneamente.

@JulianF.Weinert è un'arma a doppio taglio, con un buon cdn significa latenza più bassa ma mancanza di controllo se fallisce. Detto questo, se il cdn di Google va giù, metà Internet fallirà quindi il tuo non sarà l'unico. Le possibilità che sia down e non memorizzato nella cache del browser di un utente sono comunque scarse. Nella maggior parte delle situazioni usare un cdn è un vantaggio.

Vero. Non stavo parlando di un CDN completo, che ovviamente andrebbe benissimo in questo caso, visto che è progettato proprio per quel tipo di utilizzo. Tuttavia, penso che caricare script da qualsiasi john-doe.com sia un po' rischioso

Un piccolo consiglio. Quando accodi il tuo script, viene accodato per tutto il sito incluso il pannello di amministrazione. Se non vuoi lo script nel pannello di amministrazione, puoi includerlo solo per il sito in frontend.
function my_add_frontend_scripts() {
wp_enqueue_script('jquery');
wp_enqueue_script('jquery-ui-core');
}
add_action( 'wp_enqueue_scripts', 'my_add_frontend_scripts');

Non dovresti usare l'hook init per fare l'enqueueing. Usa l'hook wp_enqueue_scripts solo per il front end o l'hook admin_enqueue_scripts per il back end.

Non sapevo che l'azione wp_enqueue_scripts
fosse solo per il front end. Grazie :)

Sembra non ci sia un caricamento predefinito per questa libreria jQuery (lista completa qui), quindi probabilmente dovrai registrare lo script prima di metterlo in coda.

Pensavo potessi avere ragione (a volte i nomi con cui WP registra gli script sono diversi da quelli standard utilizzati) ma in questo caso registrare 'jquery-ui-core' dovrebbe funzionare. È elencato in http://core.trac.wordpress.org/browser/branches/3.0/wp-includes/script-loader.php#L121

Tutte le risposte qui, sebbene funzionino, sono tecnicamente sbagliate.
Il modo corretto per includere jquery-ui e altre librerie è includerle come dipendenze del tuo script.
Questo è importante perché gli strumenti di performance possono verificare queste dipendenze per modificare l'ordine di caricamento degli script e ottimizzare il sito.
Quindi, se vuoi usare jquery e jquery-ui, crea il tuo file script .js e registralo in questo modo, con le dipendenze elencate - non è necessario un comando di registrazione separato per ogni libreria che stai utilizzando:
wp_enqueue_script('your-script-handle',
plugins_url('your-script-file.js', __FILE__),
array('jquery', 'jquery-effects-core', 'jquery-ui-core')
);
Puoi trovare un elenco di tutti gli script disponibili da aggiungere come dipendenze qui: https://developer.wordpress.org/reference/functions/wp_enqueue_script/

Hai capito bene. Utilizzare le dipendenze nelle tue chiamate wp_enqueue_script è il modo corretto per includere jquery/jquery-ui/etc. Non è necessario registrarli separatamente.

E se li registri separatamente quando il tuo script dipende da loro, il tuo script potrebbe/non funzionerà sui siti che ottimizzano le prestazioni - ad esempio se gli script vengono combinati in un unico script per velocizzare il caricamento, o se sono differiti o minimizzati (dipende dalla minimizzazione ma l'ordine può cambiare). Se non hai detto a WordPress che il tuo script dipende da altri script, non puoi garantire l'ordine in cui verranno caricati.
