Cum să încarci scripturi/stiluri specifice pentru o pagină
Știu că în procesul implicit de pornire WordPress, mai întâi este apelat functions.php
, după care urmează toate elementele temei.
Dar în prezent intenționez să refactorizez complet tema mea pentru a o optimiza.
Ideea mea este să am un fișier CSS de bază pentru proprietățile comune, normalizare și culori.
Sau să păstrez un singur fișier CSS, dar în acest caz trebuie să codific manual un switch case în functions.php
pentru a determina pagina.
Și un alt fișier specific pentru fiecare pagină, deoarece nu are sens să încarc un fișier CSS uriaș cu toate stilurile definite.
Deci întrebarea mea este care este cel mai bun loc pentru a face hook pentru încărcarea unui script/stil specific?
Ar trebui să fie în header-xxx.php
sau alt fișier? Poate există o modalitate de a implementa această idee într-un mod mai scalabil și elegant?
Aș fi recunoscător pentru orice ajutor.

Totul depinde de dimensiunea personalizărilor tale și de modul în care îți organizezi lucrurile. Dar există două metode principale de a face acest lucru. functions.php și template files
Modul în care prefer să fac acest lucru este să înregistrez toate scripturile/stylesheet-urile în functions.php, astfel încât să știu cu ce voi lucra, dar voi încărca doar ceea ce am nevoie atunci când am nevoie.
Ai putea încărca toate lucrurile tale condițional în fișierul functions.php ( if( is_page( 'blah') { //... încarcă lucruri }
) sau ai putea folosi template files pentru a stiliza categorii/tag-uri/postări/pagini specifice etc.
Apoi, în acel fișier template, apelezi fișierele tale de script/stylesheet încărcate acolo. Asta face și un mod ordonat de a înțelege ce este încărcat unde.
Dar cu siguranță, dacă dorești să împărți stylesheet-ul tău în fișiere mai mici, va trebui să folosești
Aceeași logică s-ar aplica și pentru scripturi cu funcțiile corespunzătoare de înregistrare/încărcare
De asemenea, ia în considerare numărul de cereri în strategia ta, dacă împărți lucrurile tale în mai multe fișiere, încearcă să menții numărul de fișiere încărcate scăzut, astfel încât să nu afectezi negativ timpul de încărcare al paginii în acest fel.
Există un alt lucru pe care îl poți face pentru a accelera încărcarea paginii. Dacă îi spui browserului să cache-uiască stylesheet-urile tale, atunci poate 1 (sau câteva) ar avea mai multe șanse să fie încărcate din cache decât dacă ai mai multe fișiere peste tot pe site-ul tău și acestea trebuie întotdeauna să fie preluate de pe server pentru că este o nouă cerere de fișier pe fiecare pagină nouă care este încărcată. Așa că ține cont și de asta.
Indiferent, cache-ul pentru 1 sau mai multe resurse este o abordare bună și va crește responsivitatea percepută a site-ului tău în ceea ce privește viteza site-ului.
Dacă ai nevoie de mai multe îndrumări despre cum să folosești aceste funcții, doar spune-ne.
EDIT
Principalele motive pentru înregistrarea scripturilor sunt următoarele
- Face mai ușor să apelezi un script/stylesheet când avem nevoie de el
- Face posibilă utilizarea unui script/stylesheet înregistrat ca o dependență pentru un fișier pe care trebuie să-l încărcăm.
- Ne previne să scriem același cod mai mult decât avem nevoie, simplificând eficient codul nostru
- Mai multe lucruri la care poate nu mă gândesc acum
NOTĂ
Un script/stylesheet care a fost înregistrat nu trebuie să fie încărcat dacă este listat ca un $deps
al fișierului pe care îl încarci în prezent.
Un exemplu (nu neapărat cum ar trebui să faci, dar pentru a înțelege scopul)
Am înregistrat
- common-style.css
- navigation.css
- buttons.css
Acum aceste stylesheet-uri sunt înregistrate, așa că dacă merg pe o pagină specifică și vreau să aplic o stilizare diferită acolo. Încarc pe acea pagină (fie prin instrucțiune condițională în functions.php sau în template-ul paginii) specific-style.css
astfel.
add_action( 'wp_enqueue_scripts', 'my_specific_style' );
function my_specific_style(){
wp_enqueue_style( 'specific-style', get_stylesheet_directory_uri() . '/path/to/specific-style.css', array( 'common-style', 'navigation', 'button') );
}
Reține că array-ul din wp_enqueue_style
este un array de handle-uri ale stylesheet-urilor deja înregistrate. WP va încărca convenabil toate cele 4 fișiere în ordinea corectă pentru a respecta dependența.
Ai putea înlănțui dependența prin simpla înregistrare a fiecărui script/stylesheet cu dependența corectă
adică buttons.css depinde de navigation.css care depinde de common-style.css
Dacă înregistrez cu această logică în minte, trebuie doar să încarc specific-style.css cu buttons.css ca dependență și WP va înlănțui încărcarea pentru a respecta ordinea.

Mulțumesc pentru răspunsul excelent, nu va afecta performanța dacă voi înregistra (wp-register-style/script
) scripturile/stilurile pentru toate paginile mele în functions.php? Care sunt beneficiile înregistrării tuturor stilurilor și încărcării lor doar atunci când sunt necesare?

În mod normal nu, nu vei întâmpina probleme de performanță, este chiar recomandat să faci astfel. Voi actualiza răspunsul meu cu principalele avantaje

"refactorizare", "optimizare", "scalabilitate", "eleganță". Preocupări excelente! Ești pe drumul cel bun. Cu toate acestea, împărțirea unui fișier CSS în mai multe nu este soluția pentru aceste preocupări. Iată de ce:
Browser-urile cache-ază fișierele CSS. Așadar, odată ce prima pagină se încarcă, browser-ul nu va mai cere același fișier CSS pentru pagina următoare. Da, prima încărcare a paginii va fi ușor, imperceptibil mai lentă. Dar restul paginilor vor beneficia de acest lucru.
Mai puține cereri este una dintre cele mai importante modalități de a optimiza viteza unui site. (vezi Steve Souders sau acest articol).
O optimizare suplimentară este să minifici CSS-ul tău. (vezi postul Google PageSpeed.) Mulțumiri lui @bynicolas pentru sugestie.
Sigur, poți spune, dar cum rămâne cu eleganța? Iată vestea bună: Sass și LESS. Acestea îți permit să scrii mai puțin cod, să îl împarți în mai multe fișiere care sunt compilate într-un singur fișier CSS și multe altele.

PS: Am avut de fapt aceeași idee acum câțiva ani: de ce să nu împărțim un fișier CSS mare în fișiere CSS mai mici, specifice fiecărei pagini? Părea o optimizare evidentă până când unul dintre colegii mei mi-a explicat de ce de fapt va face site-ul mai lent.

Răspuns excelent, am vorbit puțin despre asta în răspunsul meu, dar tu ai explicat-o bine. Poate nu este intuitiv la început, dar faptul că totul este cache-uit va face de fapt lucrurile mai rapide. Aș adăuga că minimizarea unui singur fișier CSS mai mare ar fi și mai benefică decât încărcarea mai multor fișiere mici.
