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 obțin cum sunt colectate toate buclele într-un singur loop.php (am văzut și acel fișier).

Deci, cum să abstracți de exemplu o anumită parte comună a șablonului și apoi să o reutilizați în alte șabloane?

Comentarii

Răspuns

Câteva răspunsuri introductive foarte bune aici.

Practic, get_template_part() permite dezvoltatorilor de teme să configureze o ordine de specificitate a fișierelor șablon. Gândiți-vă la el în mod similar specificitate, deoarece se aplică selectorilor CSS. Când proiectați ceva, doriți să începeți cu minimul specific, astfel încât să poată fi ușor suprascris în părțile unui design care necesită atenție individuală.

Deci, de exemplu, , creați un blog și creați o buclă .php fișier care funcționează bine pentru marcarea postărilor. Dar planificați în avans și îl numiți mai târziu în fișierele dvs. de șabloane cu specificatori de context suplimentari – să zicem, pe pagina index, apelați get_template_part( "loop", "index" );, pe șablonul unic, 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 îl face foarte ușor pe drum când decideți să marcați bucla pe paginile dvs. de arhivă diferit de pagina de pornire: creați doar un loop-archive.php și „va fi utilizat mai degrabă decât genericul 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ă unul există) pentru fișierul numit. Acest lucru este foarte util pentru dezvoltarea pluginurilor. În unul dintre pluginurile mele, definesc un tip de postare personalizată și am creat un fișier șablon de buclă pentru acel tip de postare personalizată în directorul meu de pluginuri. Dar … vreau pentru a permite temelor care folosesc pluginul meu să înlocuiască marcajul meu dacă aleg. Aici locate_template() face cu adevărat minuni.

locate_template($template_names, $load = false, $require_once = true ) 

va căuta fiecare dintre numele din matricea $ template_names din directorul foii de stil, apoi în temp director târziu. Trecerea „adevărat” ca argument $ load înseamnă că va solicita primul fișier găsit și va returna un șir gol dacă nu a fost găsit niciun fișier șablon. Așa că pot face ceva de genul acesta în pluginul meu:

if ( "" === locate_template( "loop-mycustomposttype.php", true, false ) ) include( "loop-mycustomposttype.php" ); 

… ceea ce ar trebui să faciliteze foarte ușor pentru dezvoltatorii de teme personalizarea pluginului meu doar prin includerea un fișier numit loop-mycustomposttype.php în tema lor.

Comentarii

  • Înlocuiți template_template cu aceasta, vă rog. include(locate_template( 'loop-mycustomposttype.php')) În acest mod este posibilă trecerea variabilelor. Am ' găsit aici aici link . ' este extrem de util!
  • Dacă faceți acest lucru, ' va fi necesar să schimbați acest lucru, de asemenea. Ca acesta if ( false === include(locate_template( 'loop-mycustomposttype.php')) )
  • Oh, punct bun. Cu formula pe care am dat-o, apelul require sau require_once (de la locate_template) se află în interior o funcție și nu are ' t acces la domeniul de aplicare curent.

Răspuns

Nu toate buclele, bucla principală. 😉 Indiferent dacă vă uitați la pagina principală sau la o categorie sau știți ce, veți avea întotdeauna o buclă principală. Conținutul acelei bucle principale este determinat de interogarea care a fost rulată înainte șablonul dvs. a fost apelat deloc.

Șablonul loop.php pur și simplu rulează peste elementele din buclă și le formatează. Consultați documentația de la Codex .

Dacă vă uitați la loop.php, veți vedea că Twenty-Ten apoi diversifică în acel fișier șablon.

get_template_part() doar încarcă o parte șablon și o parcurge. La fel de bine puteți extrage părți din loop.php în fișiere separate și înlocuiți-le cu un get_template_part("loop", "category") și așa mai departe apeluri.

Sau ați putea avea un șablon de piesă pentru fiecare postare individuală în buclă și apelați-vă loop.php numai la get_template_part("loop","post"); în cadrul clauzei while.... Totul depinde de dvs.

Răspuns

Din get_template_part codex :

<?php get_template_part( "loop", "index" ); ?>

va face un PHP require () pentru primul fișier care există …

Atât de eficient va funcționa ca și cum ai fi nevoie de un alt fișier php.

Actualizare : Există o ușoară diferență de „a cere” – Este înfășurat într-o funcție trebuie să global dacă doriți să transmiteți orice variabilă din șablonul dvs. în partea șablonului dvs.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *