Quando dovrei usare wp_register_script() con wp_enqueue_script() rispetto al solo wp_enqueue_script()?

21 gen 2013, 16:36:50
Visualizzazioni: 49.3K
Voti: 70

Ho difficoltà a capire quando sia necessario utilizzare wp_register_script(). Attualmente, uso semplicemente qualcosa del tipo:

add_action( 'admin_enqueue_scripts', array( $this, 'enqueue' ) );
function enqueue() {
    $handle = 'some-handle'; // gestore
    $js = 'http://example.com/my.js';
    wp_register_script( $handle, $js );
    wp_enqueue_script( $handle );
}

Ho fatto molte ricerche (Codex, blog, ecc.), ma non riesco a capire bene quando dovrei prima registrare, o quando dovrei semplicemente accodare. Ad esempio, ho notato che TwentyTwelve non registra alcun stile o script, li accoda e basta.

0
Tutte le risposte alla domanda 3
9
68

La pagina del Codex per wp_register_script() dice letteralmente:

Un modo sicuro per registrare script JavaScript in WordPress per un utilizzo successivo con wp_enqueue_script().

Ciò significa che, se vuoi registrare i tuoi script ma non caricarli direttamente nelle tue pagine, puoi registrare i file una volta e poi caricarli quando ti servono.

Per esempio:

Hai un'istruzione switch che carica alcune funzionalità, ma due dei tre casi necessitano di un particolare file JavaScript, mentre uno no. Puoi accodare lo script ogni volta, il che consuma più risorse, oppure accodarlo solo quando ti serve:

...
wp_register_script( 'my-handy-javascript', ... );
...
switch( $somevar ) {
    case 'value':
        wp_enqueue_script( 'my-handy-javascript' ); // necessita del file
        ...
    break;
    case 'value2':
        wp_enqueue_script( 'my-handy-javascript' ); // necessita del file
        ...
    break;
    default:
    case 'value3': // non necessita del file
        ...
    break;
}

Non è necessario registrare uno script e poi accodarlo, ma può fornire una certa logica al tuo codice se registri tutti gli script di cui hai bisogno da qualche parte nel tuo functions.php invece che ovunque nel tuo codice.

Il Codex dice anche quanto segue:

Utilizza l'azione wp_enqueue_scripts per chiamare questa funzione, oppure admin_enqueue_scripts per chiamarla sul lato amministrativo.

Ciò significa che se vuoi accodare il tuo script sia nel front-end che nel back-end, puoi registrare lo script una volta e poi caricarlo nel front-end con wp_enqueue_script e nel back-end con admin_enqueue_script.
In questo modo non avrai la stessa risorsa di accodamento duplicata in un tema, plugin, widget o qualsiasi altra cosa.

21 gen 2013 16:47:19
Commenti

Grazie. Questo ha chiarito molto. Quindi, pensi che TwentyTwelve non si preoccupi di registrare prima dato che sicuramente li caricherà?

akTed akTed
21 gen 2013 17:09:12

Potrebbe sicuramente essere una possibilità. Non so come è costruito il tema Twenty Twelve dato che non lo uso mai, ma avranno sicuramente le loro ragioni per usare enqueue invece di register.

Mike Madern Mike Madern
21 gen 2013 17:14:33

Per come la vedo io, la funzione register non è tecnicamente necessaria, esiste solo per comodità: fa risparmiare un po' di digitazione. Se questo è vero, allora dovrebbe essere esplicitamente dichiarato nella documentazione.

Jan-Philip Gehrcke Jan-Philip Gehrcke
16 giu 2015 23:41:22

In questo senso, non sono d'accordo con "Puoi accodare lo script ogni volta, il che richiede più risorse, o semplicemente accodare lo script quando ti serve". Nel tuo codice di esempio, potresti rimuovere la chiamata a register e invece avere multiple chiamate equivalenti complete (con l'argomento $src) a wp_enqueue_style(). Questo richiederebbe solo più digitazione, ma non comporterebbe maggiori requisiti di risorse. Corretto?

Jan-Philip Gehrcke Jan-Philip Gehrcke
16 giu 2015 23:43:25

Quindi, questo significa che per caricare uno script o un file css, è necessario utilizzare le funzioni wp_enqueue_scripts o wp_enqueue_style, con o senza la funzione register?

Lai32290 Lai32290
20 ott 2015 04:12:18

Un punto che è stato tralasciato da tutte le spiegazioni finora è che puoi usare wp_register_script() per semplicemente registrare uno script in modo che possa essere utilizzato come dipendenza per altri script e venga caricato solo con essi, senza mai essere accodato direttamente.

JHoffmann JHoffmann
5 nov 2016 18:57:31

Anche se questa spiegazione è chiara, consiglio di leggere anche questa risposta.

lowtechsun lowtechsun
15 nov 2016 20:15:32

Quello che è ridicolo è che devi registrare lo script ad esempio su wp_enqueue_scripts, il che non ha senso se vuoi essere preciso e registrare tutto il tuo materiale per renderlo disponibile in seguito (come dipendenza). Noooo... Devi usare uno o più degli stessi 3 hook (uno per il front office, uno per il back office e uno per la schermata di login). Quindi, avrai wp_register_script() seguito dall'utilizzo di quello script registrato comunque. Non così elegante ora, vero? Il che secondo me annulla il senso di avere due funzioni separate.

XedinUnknown XedinUnknown
28 ago 2018 18:46:36

Per tua informazione, admin_enqueue_script non sembra essere una funzione/hook di WordPress. Ma admin_enqueue_scripts è un hook di WordPress che può caricare file JavaScript o CSS accodati - vedi: https://developer.wordpress.org/reference/hooks/admin_enqueue_scripts/

risingPhoenix1979 risingPhoenix1979
6 apr 2022 20:02:05
Mostra i restanti 4 commenti
4
12

Ho esaminato alcuni articoli e sono giunto alla seguente conclusione. Penso che possa essere utile.

  1. Registrare qualsiasi script utilizzando wp_register_script() significa solo registrarlo, non caricarlo. Lo script registrato non verrà caricato finché non viene accodato utilizzando wp_enqueue_script().
  2. Non è necessario registrare e accodare ogni script contemporaneamente. Dovremmo semplicemente accodarli. La registrazione non è obbligatoria poiché la funzione wp_enqueue_script() registra automaticamente lo script.
  3. Ma dobbiamo registrare quando ci troviamo in una delle seguenti situazioni:

    a. Supponiamo di aver bisogno che uno script venga caricato in più di un luogo, ad esempio una volta nel front-end e una volta nel back-end (pagina di amministrazione). Possiamo registrare lo script una sola volta e poi accodarlo separatamente nel front-end e nel back-end. Attenzione: accodare significa caricare. Registrare non significa caricare. Se non lo registriamo, verrà automaticamente registrato ogni volta che lo accodiamo. D'altra parte, se lo registriamo una volta, rimarrà registrato una sola volta, indipendentemente da quante volte lo accodiamo.

    b. Se vogliamo utilizzare uno script come dipendenza di altri script, allora non è necessario accodarlo con wp_enqueue_script(). Basta registrarlo con wp_register_script(). Verrà automaticamente accodato quando utilizzeremo il suo handle come dipendenza di altri script accodati con wp_enqueue_script().

    c. Se vogliamo che lo script venga caricato solo quando necessario invece di essere caricato subito, possiamo semplicemente registrarlo per un uso successivo. Un caso d'uso è stato mostrato sopra.

N.B. Per quanto ne sono convinto, la stessa conclusione può essere tratta per i fogli di stile CSS. Intendo dire che possiamo utilizzare wp_register_style() e wp_enqueue_style() nello stesso modo.

Nota che la conclusione qui tratta riflette la mia deduzione personale. Se sbaglio, per favore correggimi. E potresti aver raggiunto una conclusione diversa e migliore. Se è così, faccelo sapere. Chissà? Forse la tua è la migliore. Come dice il proverbio, "Tanti sentieri, tante vie per la salvezza." :)

https://ansrthemeaction.blogspot.com/2019/11/wpregisterscript-when-to-use.html

1 gen 2019 15:06:46
Commenti

La tua spiegazione è la migliore che abbia mai letto. Ora capisco perché è importante registrare gli script. Grazie!

Eje Eje
30 ott 2019 23:42:19

Grazie mille @Jee

Mohammad Shohel Rana Mohammad Shohel Rana
4 nov 2019 05:29:39

Questa è la risposta più utile che abbia mai letto. Grazie.

Thiago Santos Thiago Santos
13 feb 2023 22:49:20

Grazie mille @ThiagoSantos

Mohammad Shohel Rana Mohammad Shohel Rana
18 mar 2023 02:40:45
1
11

IMHO il principale vantaggio dell'utilizzare wp_register_script prima di wp_enqueue_scripts è illustrato nel seguente paragrafo del Codex:

Gli script che sono stati pre-registrati utilizzando wp_register_script() non necessitano di essere accodati manualmente con wp_enqueue_script() se sono elencati come dipendenza di un altro script che viene accodato. WordPress includerà automaticamente lo script registrato prima di includere lo script accodato che elenca l'handle dello script registrato come dipendenza.

Se ritieni di non aver bisogno di questa funzionalità (ad esempio perché sei sicuro al 100% che il tuo script non sarà coinvolto in nessuna dipendenza) probabilmente puoi procedere direttamente con wp_enqueue_scripts, senza un preliminare wp_register_script.

1 giu 2017 22:43:01
Commenti

Penso che l'ultimo paragrafo (riguardo al non aver bisogno di registrare se "sei sicuro al 100% che il tuo script non sarà coinvolto in alcuna dipendenza") sia sbagliato. Credo che la cosa corretta sia che non hai bisogno di registrare se sei sicuro che caricherai comunque il tuo script. - l'enqueuing implica implicitamente anche la registrazione del tuo script cosicché possa essere dipendente da altri script anche se lo hai solo accodato.

epeleg epeleg
18 set 2022 12:30:23