Come includere correttamente gli effetti jquery-ui su wordpress


25

Ho cercato di includere gli effetti dell'interfaccia utente jquery (in particolare l'effetto shake) sul mio tema wordpress. Finora sono stato in grado di includere solo lo script jQuery, ma non ho davvero idea di dove posizionare gli script dell'interfaccia utente e come accodarli.

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 l'aiuto!


5
Una nota: non dovresti avere bisogno di accodare jquery, perché è già elencato come dipendenza di jquery-ui-core.
goldenapples,

Risposte:


36

Mentre WordPress include le librerie dell'interfaccia utente jQuery, non include la libreria UI / Effetti. Quella libreria è separata e autonoma. Dovrai includere una copia del file effects.core.js e accodarlo separatamente.

Nota che dovresti chiamarlo jquery-effects-core quando lo accodi, per coerenza dei nomi.

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 di effetti come parte del core. Puoi semplicemente accodare i pezzi della libreria di effetti che devi usare ora.

L'elenco di slug per questi file è disponibile in wp-Includes / script-loader.php, ma lo slug del core è jquery-effects-core.

wp_enqueue_script("jquery-effects-core");

1
Ricorda che per un effetto reale (cieco, rimbalzo, dissolvenza, ...) devi accodare quell'effetto in modo esplicito. Come per 'dissolvenza':wp_enqueue_script( 'jquery-effects-fade' );
SunnyRed

L'utente dovrebbe inserire il proprio Javascript in un file separato e quindi accodare quel file ed elencare le dipendenze di cui ha bisogno. In questo modo, WordPress (e plugin di prestazioni) conoscono l'ordine richiesto per caricare questi script e li posizioneranno nell'ordine corretto sulla pagina.
Dave Hilditch il

8

@dabito,

Non stai caricando gli script nel modo giusto ... Non chiamare wp_enqueue_script()all'interno del file del modello del tema (sembra che sia header.php). È necessario chiamare questa funzione da un hook separato.

Nel functions.phpfile del 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 bene (aggiungendo i <script />tag appropriati nell'intestazione. Quindi l'altro codice JavaScript dovrebbe funzionare.

Se vuoi aggiungere script al lato amministrativo delle cose, aggiungi invece la tua azione admin_enqueue_scripts.


1
Non esattamente vero Finché li chiama prima della chiamata wp_head (), dovrebbe funzionare bene. Non devono essere agganciati e non dovrebbero comunque essere agganciati a init. Se hai intenzione di agganciarli da qualche parte, agganciarli al gancio di azione "wp_enqueue_scripts". Ecco a cosa serve.
Otto

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

Il codice è casuale in alcuni punti. L'azione migliore da utilizzare per questo è 'wp_enqueue_scripts' per il front-end o 'admin_enqueue_scripts' sul back-end. Il collegamento a init funzionerà, ma inutilmente accoderà lo script sull'intero sito.
Otto,

Ho aggiornato il mio frammento di codice di conseguenza. Inizialmente si trattava di una reazione rapida, basata sul riferimento del Codex ... l'uso wp_enqueue_scriptsè sicuramente il modo migliore per evitare di richiedere un is_admin()controllo extra .
EAMann,

Questo è anche il modo sbagliato: i plug-in delle prestazioni devono conoscere le dipendenze. L'autore dovrebbe scrivere il proprio file .js e accodarlo e nominare le dipendenze - WordPress gestirà il resto.
Dave Hilditch il

7

Puoi anche accodare l'intera IU jQuery direttamente da Google. Ecco come lo faccio:

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 poiché jQuery è elencato come dipendenza per l'interfaccia utente di jQuery, non è necessario accodarlo manualmente. WordPress lo farà automaticamente per te.


3
Puoi persino caricare tutte le librerie jQuery dal CDN di Google anziché dal tuo sito.
Jan Fabry,

Scoraggerei fortemente dal caricamento di script da fonti straniere. L'ho fatto abbastanza a lungo e (raramente) è accaduto che l'host fosse inattivo, quindi più clienti hanno avuto problemi con le loro pagine contemporaneamente.
Julian F. Weinert,

1
@ JulianF.Weinert è un'arma a doppio taglio, con un buon cdn significa minore latenza ma mancanza di controllo se fallisce. Detto questo, se il cdn di Google scende metà di Internet fallirà, quindi il tuo non sarà l'unico. Tuttavia, le probabilità che sia inattivo e non memorizzato nella cache di un browser degli utenti sono ridotte. Per la maggior parte delle situazioni l'utilizzo di un cdn è un vantaggio.
Alex

Vero. Non stavo parlando di un CDN in piena regola, che, ovviamente, andrebbe assolutamente bene qui, dal momento che è progettato proprio per quell'uso. Il caricamento di script da qualsiasi john-doe.com è un po 'rischioso, penso
Julian F. Weinert,

3

Non sembra esserci un carico predefinito per questa libreria jQuery (elenco completo qui ), quindi probabilmente dovrai registrare lo script prima di accodarlo.


1
Ho pensato che potresti avere ragione (a volte i nomi in cui WP registra gli script sono diversi dai nomi standard usati) ma in questo caso la registrazione di "jquery-ui-core" dovrebbe funzionare. È elencato in core.trac.wordpress.org/browser/branches/3.0/wp-includes/…
goldenapples

Buon punto! Ho pensato che volesse caricare solo quella libreria jQuery, nel qual caso caricare il resto sarebbe stato un po 'gonfio.
editore

3

Solo un piccolo consiglio. Quando accoda il tuo script, si accoda per l'intero sito incluso il pannello di amministrazione. Se non vuoi lo script nel pannello di amministrazione, puoi includerli 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');

4
Non dovresti usare l'hook init per eseguire l'accodamento. Utilizzare il hook wp_enqueue_scripts solo per il front-end o il hook admin_enqueue_scripts per il back-end.
Otto,

Non sapevo che l' wp_enqueue_scriptsazione è solo per il front-end. Grazie :)
Tareq,

0

Tutte le risposte qui, mentre funzionano, sono tecnicamente sbagliate.

Il modo corretto di includere jquery-ui e altre librerie è includerli come dipendenze del proprio script.

Questo è importante, perché gli strumenti per le prestazioni possono controllare queste dipendenze per modificare l'ordine di caricamento degli script per ottimizzare il sito.

Quindi, se vuoi usare jquery e jquery-ui, crea il tuo file di script .js e accodalo in questo modo, con le dipendenze elencate - non è necessario un comando enqueue separato per ogni libreria che stai usando:

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/


1
Hai ragione. L'uso delle dipendenze nelle proprie chiamate wp_enqueue_script è il modo corretto di includere jquery / jquery-ui / etc. Non è necessario accodarli separatamente.
Michae Pavlos Michael,

E se li accodate separatamente quando lo script dipende da loro, lo script potrebbe / si interromperà su siti che ottimizzano le prestazioni, ad esempio se gli script sono combinati in uno script per accelerare il caricamento o se vengono differiti o ridotti al minimo (dipende dalla minifcazione 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,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.