Cum să folosești funcția get_template_part()?
Ar putea cineva să-mi explice cum funcționează această funcție? Știu ce face, dar când mă uit la codul sursă din șablonul twenty_ten, nu înțeleg cum toate buclele sunt colectate într-un singur fișier loop.php (am văzut și acel fișier).
Deci cum pot, de exemplu, să abstractizez o anumită parte comună a unui șablon și apoi să o reutilizez în alte șabloane?

Unele răspunsuri foarte bune de introducere aici.
În esență, get_template_part()
permite dezvoltatorilor de teme să stabilească o ordine de specificitate a fișierelor de șablon. Gândiți-vă la asta similar cu modul în care specificitatea se aplică selectorilor CSS. Când proiectați ceva, doriți să începeți cu un minim de specificitate, astfel încât să poată fi ușor suprascris în părțile unui design care necesită atenție individuală.
De exemplu, stilizați un blog și creați un fișier loop.php care funcționează bine pentru marcarea articolelor. Dar planificați în avans și îl apelați în fișierele de șablon ulterior cu specificatori de context suplimentari - să zicem, pe pagina de index, apelați get_template_part( 'loop', 'index' );
, în șablonul single, apelați get_template_part( 'loop', 'single' );
, pe paginile de arhivă, apelați get_template_part( 'loop', 'archive' );
, și așa mai departe. Acest lucru face foarte ușor mai târziu, când decideți să marcați bucla pe paginile de arhivă diferit de pagina de start: doar creați un șablon loop-archive.php și acesta va fi folosit în locul celui generic loop.php.
Dar magia din spatele get_template_part()
se află în funcția locate_template()
, care verifică mai întâi directorul temei, apoi directorul părinte (dacă există) pentru fișierul numit. Acest lucru este foarte util pentru dezvoltarea de plugin-uri. Într-unul dintre plugin-urile mele, definesc un tip de postare personalizat și creez un fișier de șablon pentru bucla acelui tip de postare personalizat în directorul plugin-ului meu. Dar... vreau să permit temelor care folosesc plugin-ul meu să suprascrie marcajul meu dacă doresc. Aici locate_template()
funcționează cu adevărat minunat.
locate_template($template_names, $load = false, $require_once = true )
va căuta fiecare dintre numele din array-ul $template_names în directorul stylesheet, apoi în directorul șablon. Transmiterea 'true' ca argument $load înseamnă că va requisiționa primul fișier găsit și va returna un șir gol dacă nu a fost localizat niciun fișier de șablon. Așadar, pot face ceva de genul acesta în plugin-ul meu:
if ( '' === locate_template( 'loop-mycustomposttype.php', true, false ) )
include( 'loop-mycustomposttype.php' );
...ceea ce ar trebui, sperăm, să facă foarte ușor pentru dezvoltatorii de teme să personalizeze plugin-ul meu doar prin includerea unui fișier numit loop-mycustomposttype.php în tema lor.

Înlocuiește locate_template cu aceasta, te rog.
include(locate_template( 'loop-mycustomposttype.php'))
În acest fel este posibil să transmiți variabile. Am găsit asta aici link. Este extrem de util!

Făcând acest lucru va fi necesar să schimbi și acest if. Astfel if ( false === include(locate_template( 'loop-mycustomposttype.php')) )

Nu toate buclele, ci bucla principală. ;-) Indiferent dacă vizualizezi pagina principală, o categorie sau orice altceva, vei avea întotdeauna o buclă principală. Conținutul acestei bucle principale este determinat de interogarea care a fost rulată înainte ca șablonul tău să fie apelat.
Șablonul loop.php pur și simplu parcurge elementele din buclă și le formatează. Vezi documentația din Codex.
Dacă analizezi loop.php din Twenty-Ten, poți observa că Twenty-Ten diversifică în interiorul acelui singur fișier șablon.
get_template_part()
încarcă pur și simplu o parte de șablon și o parcurge. La fel de bine poți extrage părți din loop.php în fișiere separate și le poți înlocui cu apeluri de tipul get_template_part('loop', 'category')
și așa mai departe.
Sau ai putea avea un sub-șablon pentru fiecare post individual din buclă și ca loop.php tău să apeleze doar get_template_part('loop','post');
în interiorul clauzei while...
. Totul depinde de tine.

Din documentația get_template_part:
<?php get_template_part( 'loop', 'index' ); ?>
va efectua un require() PHP pentru primul fișier care există...
Deci, în practică, va funcționa ca și cum ai include un alt fișier php.
Actualizare: Există o mică diferență față de 'require' - Este încapsulat într-o funcție, așa că trebuie să folosești global
dacă dorești să transmiți variabile din șablonul tău către partea de șablon.
