Când ar trebui să folosesc wp_register_script() cu wp_enqueue_script() vs doar wp_enqueue_script()?
Am dificultăți în a înțelege când trebuie să folosesc wp_register_script(). În prezent, folosesc doar ceva de genul:
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue' ) );
function enqueue() {
$handle = 'some-handle';
$js = 'http://example.com/my.js';
wp_register_script( $handle, $js );
wp_enqueue_script( $handle );
}
Am citit multe materiale (Codex, bloguri, etc.), dar nu pot înțelege exact când ar trebui să înregistrez mai întâi scripturile și când ar trebui doar să le încarc direct. De exemplu, am observat că tema TwentyTwelve nu înregistrează niciun stil sau script, ci doar le încarcă direct.
Pagina wp_register_script() din Codex spune literalmente:
O modalitate sigură de a înregistra scripturile JavaScript în WordPress pentru utilizare ulterioară cu
wp_enqueue_script().
Aceasta înseamnă că, dacă doriți să vă înregistrați scripturile, dar nu să le încărcați direct în paginile dvs., puteți înregistra fișierele o singură dată și apoi să le încărcați când aveți nevoie de ele.
De exemplu:
Aveți o instrucțiune switch care încarcă o anumită funcționalitate, dar două din cele trei cazuri necesită un anumit fișier JavaScript, iar unul nu. Puteți încărca scriptul de fiecare dată, ceea ce consumă mai multe resurse, sau puteți încărca scriptul doar atunci când aveți nevoie de el:
...
wp_register_script( 'my-handy-javascript', ... );
...
switch( $somevar ) {
case 'value':
wp_enqueue_script( 'my-handy-javascript' ); // are nevoie de fișier
...
break;
case 'value2':
wp_enqueue_script( 'my-handy-javascript' ); // are nevoie de fișier
...
break;
default:
case 'value3': // nu are nevoie de fișier
...
break;
}
Nu este necesar să înregistrați un script și apoi să-l încărcați, dar poate oferi o anumită logică în codul dvs. dacă înregistrați toate scripturile de care aveți nevoie undeva în functions.php în loc să o faceți peste tot în cod.
Codex mai spune următoarele:
Utilizați acțiunea
wp_enqueue_scriptspentru a apela această funcție sauadmin_enqueue_scriptspentru a o apela în administrare.
Aceasta înseamnă că, dacă doriți să încărcați scriptul dvs. atât în front-end cât și în back-end, puteți înregistra scriptul o singură dată și apoi să-l încărcați în front-end cu wp_enqueue_script și în back-end cu admin_enqueue_script.
În acest fel, nu veți avea aceeași resursă de încărcare de două ori într-o singură temă, plugin, widget sau orice altceva.
Mulțumesc. Asta a clarificat multe. Deci, crezi că TwentyTwelve nu se obosește să înregistreze mai întâi, din moment ce le va încărca cu siguranță?
akTed
Cu siguranță ar putea fi o posibilitate. Nu știu cum este construit tema Twenty Twelve deoarece nu o folosesc niciodată, dar sigur au motivele lor pentru a folosi enqueue în loc de register.
Mike Madern
Din punctul meu de vedere, funcția de înregistrare nu este tehnic necesară, există doar pentru comoditate: economisește ceva timp de scriere. Dacă asta e adevărat, atunci ar trebui să fie menționat explicit în documentație.
Jan-Philip Gehrcke
În acest sens, nu sunt de acord cu afirmația "Puteți încărca scriptul de fiecare dată, ceea ce consumă mai multe resurse, sau puteți încărca scriptul doar atunci când aveți nevoie de el". În exemplul tău de cod, ai putea elimina apelul register și în schimb să ai mai multe apeluri echivalente complete (cu argumentul $src) la wp_enqueue_style(). Acest lucru ar presupune doar mai mult efort de tastare, dar nu ar duce la cerințe mai mari de resurse. Corect?
Jan-Philip Gehrcke
Deci, asta înseamnă că pentru a încărca un script sau un fișier css, este necesar să folosești funcția wp_enqueue_scripts sau wp_enqueue_style, cu sau fără funcția de register?
Lai32290
Un aspect care a fost omis de toate explicațiile de până acum este că poți folosi wp_register_script() doar pentru a înregistra un script, astfel încât acesta să poată fi folosit ca dependință pentru alte scripturi și să fie încărcat doar împreună cu ele, fără a fi încărcat direct prin enqueue.
JHoffmann
Chiar dacă acest lucru explică bine, aș recomanda să citiți și acest răspuns.
lowtechsun
Ce e ridicol este că trebuie să înregistrezi scriptul pe, de exemplu, wp_enqueue_scripts, ceea ce nu are sens dacă vrei să fii corect și să înregistrezi toate resursele pentru a le face disponibile pentru orice altceva mai târziu (cum ar fi dependențele). Nuuuu... Trebuie să folosești unul sau mai multe dintre aceleași 3 hook-uri (unul pentru front office, unul pentru back office și unul pentru ecranul de login). Deci, vei avea wp_register_script() urmat de utilizarea acelui script înregistrat oricum. Nu prea elegant acum, nu-i așa? Ceea ce, după părerea mea, bate scopul de a avea 2 funcții separate.
XedinUnknown
Pentru informare, admin_enqueue_script nu pare a fi o funcție/hook WordPress. Dar admin_enqueue_scripts este un hook WordPress care poate încărca fișiere JavaScript sau CSS înregistrate - vezi:
https://developer.wordpress.org/reference/hooks/admin_enqueue_scripts/
risingPhoenix1979
Am parcurs câteva articole și am ajuns la următoarea concluzie. Cred că este utilă.
- Înregistrarea oricăror scripturi folosind
wp_register_script()este doar înregistrarea; nu încărcarea lor. Scriptul înregistrat nu va fi încărcat până când nu este pus în coadă folosindwp_enqueue_script(). - Nu este nevoie să înregistrăm și să punem în coadă fiecare script simultan. Putem doar să le punem în coadă. Înregistrarea nu este obligatorie, deoarece funcția
wp_enqueue_script()înregistrează automat scriptul. Dar trebuie să înregistrăm scripturile în următoarele situații:
a. Să presupunem că avem nevoie ca un script să se încarce în mai multe locuri, de exemplu o dată în partea de front-end și o dată în back-end (pagina de administrare). Putem înregistra scriptul o singură dată și apoi să-l punem în coadă individual în front-end și back-end. Rețineți că punerea în coadă înseamnă încărcare. Înregistrarea nu înseamnă încărcare. Dacă nu îl înregistrăm, acesta va fi înregistrat automat de fiecare dată când îl punem în coadă. Pe de altă parte, dacă îl înregistrăm o singură dată, acesta va fi înregistrat o singură dată, indiferent de câte ori îl punem în coadă.
b. Dacă vrem să folosim un script ca dependință pentru alte scripturi, atunci nu este nevoie să-l punem în coadă cu
wp_enqueue_script(). Doar îl înregistrăm cuwp_register_script(). Acesta va fi pus automat în coadă atunci când folosim numele său (handle) ca dependință pentru alte scripturi puse în coadă cuwp_enqueue_script().c. Dacă vrem ca scriptul să se încarce doar atunci când este necesar și nu imediat, îl putem înregistra pentru utilizare ulterioară. Un exemplu de utilizare a fost prezentat mai sus.
Notă: După cum sunt convins, aceeași concluzie poate fi trasă și pentru fișierele CSS. Adică putem folosi wp_register_style() și wp_enqueue_style() în același mod.
Rețineți că concluzia prezentată aici reflectă propria mea deducție. Dacă greșesc, vă rog să mă corectați. Și este posibil să fi ajuns la o concluzie diferită și mult mai bună. Dacă da, atunci vă rog să ne anunțați. Cine știe? Poate că a voastră este cea mai bună. După cum se spune, „Câte credințe, atâtea căi spre mântuire.” :)
https://ansrthemeaction.blogspot.com/2019/11/wpregisterscript-when-to-use.html
Explicația ta este cea mai bună pe care am citit-o. Acum înțeleg de ce este important să înregistrezi scripturile. Mulțumesc!
Eje
Acesta este cel mai util răspuns pe care l-am citit vreodată. Mulțumesc.
Thiago Santos
După părerea mea, principalul avantaj al utilizării wp_register_script înainte de wp_enqueue_scripts este ilustrat în următorul paragraf din Codex:
Scripturile care au fost pre-înregistrate folosind wp_register_script() nu trebuie să fie încărcate manual cu wp_enqueue_script() dacă sunt enumerate ca o dependență a unui alt script care este încărcat. WordPress va include automat scriptul înregistrat înainte de a include scriptul încărcat care listează handle-ul scriptului înregistrat ca o dependență.
Dacă crezi că nu ai nevoie de această funcționalitate (de exemplu, pentru că ești 100% sigur că scriptul tău nu va fi implicat în nicio dependență), poți să mergi direct cu wp_enqueue_scripts, fără o preliminară wp_register_script.
Cred că ultimul paragraf (despre faptul că nu este nevoie să înregistrezi dacă „ești 100% sigur că scriptul tău nu va fi implicat în nicio dependență”) este greșit. Cred că lucrul corect este că nu ai nevoie să înregistrezi dacă ești sigur că oricum vei încărca scriptul tău. - încărcarea (enqueuing) implică implicit și înregistrarea scriptului tău, astfel încât acesta poate fi folosit ca dependință de alte scripturi chiar dacă l-ai încărcat doar.
epeleg