Come includere correttamente gli effetti jquery-ui su WordPress

19 gen 2011, 00:49:40
Visualizzazioni: 74.2K
Voti: 29

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!

1
Commenti

Una nota: non dovresti aver bisogno di caricare jQuery, perché è già elencato come dipendenza di jquery-ui-core.

goldenapples goldenapples
19 gen 2011 02:14:03
Tutte le risposte alla domanda 6
2
41

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");
19 gen 2011 03:52:42
Commenti

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' );

SunnyRed SunnyRed
10 feb 2017 19:45:50

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.

Dave Hilditch Dave Hilditch
27 apr 2017 10:26:23
5

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

19 gen 2011 01:06:10
Commenti

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 Otto
19 gen 2011 03:47:04

@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

Lea Cohen Lea Cohen
14 feb 2011 08:49:49

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.

Otto Otto
14 feb 2011 22:54:59

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

EAMann EAMann
14 feb 2011 23:45:28

Anche questo è sbagliato - i plugin di performance hanno bisogno di conoscere le dipendenze. L'autore dovrebbe scrivere il proprio file .js e metterlo in coda (enqueue) specificando le dipendenze - WordPress gestirà il resto.

Dave Hilditch Dave Hilditch
27 apr 2017 10:27:23
4

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.

19 gen 2011 14:00:35
Commenti

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

Jan Fabry Jan Fabry
21 gen 2011 13:16:29

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.

Julian F. Weinert Julian F. Weinert
25 mag 2014 01:32:42

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

Alex Alex
10 lug 2016 22:54:56

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

Julian F. Weinert Julian F. Weinert
11 lug 2016 00:22:22
3

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');
24 ago 2011 18:45:39
Commenti

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.

Otto Otto
24 ago 2011 19:48:07

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

Tareq Tareq
24 ago 2011 21:31:27

Perfetto, grazie!

Dragi Postolovski Dragi Postolovski
24 lug 2021 00:12:45
2

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.

19 gen 2011 00:51:21
Commenti

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

goldenapples goldenapples
19 gen 2011 02:05:44

Ottimo punto! Ho presupposto che volesse caricare solo quella libreria jQuery, nel qual caso caricare il resto sarebbe un po' ridondante.

editor editor
19 gen 2011 02:18:08
2

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/

27 apr 2017 10:24:47
Commenti

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.

Michae Pavlos Michael Michae Pavlos Michael
8 mag 2017 14:58:14

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.

Dave Hilditch Dave Hilditch
10 mag 2017 14:19:46