Come aggiungere uno snippet javascript nel footer che richiede jQuery

6 nov 2011, 12:30:44
Visualizzazioni: 86.9K
Voti: 30

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?

3
Commenti

Non esiste una funzione integrata per farlo che io conosca, ed è per questo che esistono wp_register_script e wp_enqueue_script, ma puoi verificare usando jQuery stesso.

Wyck Wyck
6 nov 2011 17:42:50

Scusa per il voto negativo, ma non credo che tu abbia capito la mia domanda. Ho letto il codex e conosco l'opzione. Ma non voglio usare wp_enqueue_script per caricare un file script nel footer, voglio aggiungere uno snippet nel footer che richiede jQuery. Ho votato negativamente la risposta presa direttamente dal codex. Ho letto il codex e non ho trovato una risposta, ecco perché ho fatto una domanda. Se mi reindirizzi di nuovo al codex voterò negativamente.

Saif Bechan Saif Bechan
6 nov 2011 17:46:09

Grazie wyck, penso che sia questo il caso, grazie per aver capito correttamente la domanda. Penso che userò semplicemente uno script JS esterno per essere sicuro che lo script possa essere eseguito.

Saif Bechan Saif Bechan
6 nov 2011 17:47:09
Tutte le risposte alla domanda 5
4
35

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.

6 nov 2011 19:22:45
Commenti

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

laraib laraib
19 ott 2016 17:08:49

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.

EAMann EAMann
20 ott 2016 07:51:20

allora puoi darmi qualche esempio funzionante per favore...????

laraib laraib
20 ott 2016 08:41:16

Perché sto sviluppando il mio primo plugin WordPress e mi piacerebbe che fosse accettato dal team di WordPress... aspetto con ansia qualsiasi vostra risposta per favore... fatemi sapere cosa ne pensate così posso creare e far accettare il mio plugin...

laraib laraib
20 ott 2016 08:42:11
0
15

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

wp_add_inline_script con jQuery in WordPress

25 giu 2016 09:44:41
1

Utilizza l'azione wp_footer in questo modo:

add_action( 'wp_footer', 'wpse33008');
function wpse33008() {
?>
<script type="text/javascript">
    /** INSERISCI LO SCRIPT QUI **/
</script>
<?php
}
6 nov 2011 16:17:10
Commenti

Questa non è una buona risposta. Ho chiesto come posso specificare che lo script richiede jQuery. Se l'utente non ha jQuery in esecuzione, la tua implementazione non funzionerà.

Saif Bechan Saif Bechan
6 nov 2011 16:18:34
0

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
);
25 lug 2018 12:56:07
2
-1

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

6 nov 2011 15:30:47
Commenti

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

Saif Bechan Saif Bechan
6 nov 2011 16:14:28

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.

Rutwick Gangurde Rutwick Gangurde
6 nov 2011 17:42:21