Come aggiungere uno snippet javascript nel footer che richiede jQuery
So che posso aggiungere un file script nel footer di WordPress che richiede jQuery usando questo codice:
<?php
function my_scripts_method() {
// registra la posizione dello script, le dipendenze e la versione
wp_register_script('custom_script',
get_template_directory_uri() . '/js/custom_script.js',
array('jquery'),
'1.0',
true);
// carica lo script
wp_enqueue_script('custom_script');
}
add_action('wp_enqueue_scripts', 'my_scripts_method');
?>
Ma cosa succede se voglio aggiungere solo un normale snippet jQuery inline, non un file. Come si può fare?
Modifica
So che posso usare questo script per aggiungere qualcosa nel footer:
<?php
function myscript() {
?>
<script type="text/javascript">
// Questo dipende da jquery
</script>
<?php
}
add_action('wp_footer', 'myscript');
Ma come faccio a specificare che lo script che viene utilizzato richiede jQuery per funzionare?

Il modo più semplice per farlo è in realtà una combinazione di wp_enqueue_script
e le azioni del footer a cui hanno già fatto riferimento Saif e v0idless. Utilizzo spesso jQuery nei miei temi e plugin, ma inserisco anche tutti gli altri script nel footer.
Il modo migliore per accodare effettivamente gli script sarebbe questo:
function myscript() {
?>
<script type="text/javascript">
if ( undefined !== window.jQuery ) {
// script dipendente da jQuery
}
</script>
<?php
}
add_action( 'wp_footer', 'myscript' );
function myscript_jquery() {
wp_enqueue_script( 'jquery' );
}
add_action( 'wp_head' , 'myscript_jquery' );
Ma questo frammento di codice presuppone che tu sia quello che accoda lo script, cioè che stai facendo questo nel tuo plugin o tema.
Al momento, non c'è modo di aggiungere uno script in-line al footer di WordPress e caricarlo con dipendenze. Ma esiste un'alternativa, se sei disposto.
L'alternativa
Quando WordPress lavora con gli script, li carica internamente in un oggetto per tenerne traccia. Ci sono essenzialmente 3 liste all'interno dell'oggetto:
- registered
- queue
- done
- to_do
Quando prima registri uno script con wp_register_scripts()
viene inserito nella lista registered. Quando usi wp_enqueue_script()
lo script viene copiato nella lista queue. Dopo che è stato stampato nella pagina, viene aggiunto alla lista done.
Quindi, invece di accodare il tuo script nel footer richiedendo jQuery, puoi documentare che ha bisogno di usare jQuery e semplicemente verificare programmaticamente che jQuery sia caricato.
Questo utilizza wp_script_is()
per verificare dove è elencato lo script.
function myscript() {
if( wp_script_is( 'jquery', 'done' ) ) {
?>
<script type="text/javascript">
// script dipendente da jQuery
</script>
<?php
}
}
add_action( 'wp_footer', 'myscript' );
Potresti forse usare questo stesso codice per forzare il caricamento di jQuery anche nel footer, ma non l'ho testato... quindi i risultati potrebbero variare.

il frammento di codice che hai fornito è accettato dagli standard di sviluppo dei plugin WordPress? Se sì, lo utilizzerò nel mio plugin... per favore rispondimi su questo...

L'ultimo frammento? No. I plugin WordPress dovrebbero sempre accodare i requisiti degli script. Forzare il caricamento di jQuery al di fuori del sistema di coda in questo modo è qualcosa che dovresti fare solo sul tuo sito dove controlli il 100% dell'ambiente. Non è mai appropriato che un plugin faccia questo.

Dalla versione 4.5 di WordPress puoi aggiungere script inline utilizzando wp_add_inline_script()
. Per aggiungere uno snippet JavaScript al footer che richiede jQuery, questo codice può esserti utile
function enqueue_jquery_in_footer( &$scripts ) {
if ( ! is_admin() )
$scripts->add_data( 'jquery', 'group', 1 );
}
add_action( 'wp_default_scripts', 'enqueue_jquery_in_footer' );
function theme_prefix_enqueue_script() {
if(!wp_script_is('jquery', 'done')) {
wp_enqueue_script('jquery');
}
wp_add_inline_script( 'jquery-migrate', 'jQuery(document).ready(function(){});' );
}
add_action( 'wp_enqueue_scripts', 'theme_prefix_enqueue_script' );

So che OP vuole specificare un requisito su jQuery, e gli autori di WordPress avrebbero dovuto permettere agli snippet di essere accodati vicino ai file degli script, ma non l'hanno fatto, quindi consiglio di non cercare di forzarlo. Se non vuoi pasticciare con la coda o il suo ordine, come me (perché sto usando altri plugin che combinano e ottimizzano gli script), allora la risposta è davvero usare l'azione wp_footer
in questo modo:
<?php
add_action(
'wp_footer'
, function() {
?>
<script>
if (window.jQuery) {
// il tuo snippet
}
</script>
<?php
}
, 21 # dopo gli script accodati nel footer
);

Puoi utilizzare l'azione wp_footer
per fare questo. Consulta il codex per wp_footer.

Lo so, ma come puoi specificare che lo script che aggiungi al footer dipende da jquery. Controlla la mia modifica per essere più specifico.

Ti sei mai preoccupato di leggere il codex prima di votare negativamente le risposte degli altri? Hai mai letto riguardo l'argomento in_footer
per wp_enqueue_script
? Leggi questo: http://codex.wordpress.org/Function_Reference/wp_enqueue_script. Ti spiega come usarlo con l'azione wp_footer
.
