Quando dovrei usare wp_register_script() con wp_enqueue_script() rispetto al solo wp_enqueue_script()?
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.
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_scriptsper chiamare questa funzione, oppureadmin_enqueue_scriptsper 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.
Grazie. Questo ha chiarito molto. Quindi, pensi che TwentyTwelve non si preoccupi di registrare prima dato che sicuramente li caricherà?
akTed
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
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
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
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
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
Anche se questa spiegazione è chiara, consiglio di leggere anche questa risposta.
lowtechsun
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
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
Ho esaminato alcuni articoli e sono giunto alla seguente conclusione. Penso che possa essere utile.
- Registrare qualsiasi script utilizzando
wp_register_script()significa solo registrarlo, non caricarlo. Lo script registrato non verrà caricato finché non viene accodato utilizzandowp_enqueue_script(). - 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. 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 conwp_register_script(). Verrà automaticamente accodato quando utilizzeremo il suo handle come dipendenza di altri script accodati conwp_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
La tua spiegazione è la migliore che abbia mai letto. Ora capisco perché è importante registrare gli script. Grazie!
Eje
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.
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