Există vreo modalitate de a folosi get_template_part() cu foldere?
Mă întreb dacă există vreo modalitate de a folosi get_template_part() cu foldere? Directorul meu principal are acum multe fișiere pentru că am pus fiecare element reutilizabil într-un fișier separat. Aș dori să le pot pune în foldere.
Nu există informații despre acest lucru în Codex: http://codex.wordpress.org/Function_Reference/get_template_part

De fapt poți, am un director în tema mea numit /partials/
și în acel folder am fișiere precum latest-articles.php
, latest-news.php
și latest-statements.php
și încarc aceste fișiere folosind get_template_part()
astfel:
get_template_part('partials/latest', 'news');
get_template_part('partials/latest', 'articles');
get_template_part('partials/latest', 'statements');
Doar nu uita să omiti extensia .php
din numele fișierului.

Mulțumesc! Este atât de simplu încât e păcat că nu am descoperit asta. Eram convins că acest lucru nu este posibil pentru că Codex nu menționează acest lucru. Această întrebare a adus răspunsuri mai interesante, dar acesta este cel mai simplu, așa că probabil este cel mai util pentru o persoană obișnuită :) (așa că lasă-l să fie marcat cu bifa verde).

Din fericire, este posibil să editezi Codex, astfel încât următoarea persoană nu va avea aceeași problemă. :-)

Din păcate, nu. Dacă în codex nu găsești informația pe care o cauți, încearcă să urmezi link-ul către sursă și verifică direct codul pentru a înțelege cum funcționează.
Am analizat și funcția get_template_part
este definită astfel:
function get_template_part( $slug, $name = null ) {
do_action( "get_template_part_{$slug}", $slug, $name );
$templates = array();
if ( isset($name) )
$templates[] = "{$slug}-{$name}.php";
$templates[] = "{$slug}.php";
locate_template($templates, true, false);
}
Din aceasta, poți observa că funcția get_template_part
doar construiește numele unui fișier PHP și apelează funcția locate_template
. Nu este foarte utilă, așa că am verificat și funcția locate_template
:
function locate_template($template_names, $load = false, $require_once = true ) {
$located = '';
foreach ( (array) $template_names as $template_name ) {
if ( !$template_name )
continue;
if ( file_exists(STYLESHEETPATH . '/' . $template_name)) {
$located = STYLESHEETPATH . '/' . $template_name;
break;
} else if ( file_exists(TEMPLATEPATH . '/' . $template_name) ) {
$located = TEMPLATEPATH . '/' . $template_name;
break;
}
}
if ( $load && '' != $located )
load_template( $located, $require_once );
return $located;
}
Funcția locate_template
caută fișierul PHP specificat în apelul get_template_part
. Dar poți apela direct locate_template
din codul tău. Și acest lucru este util.
Încearcă acest cod în loc de get_template_part('loop-single.php')
(fișierul tău este localizat în directorul mydir
din tema ta):
locate_template( 'mydir/loop-single.php', true, true );

Scurtătură interesantă, mă întreb dacă are vreun efect negativ asupra secvenței de încărcare sau a conținutului fișierelor.

Nota funcției get_template_part()
spune:
Note
- Utilizează: locate_template()
- Utilizează: do_action() Apelează acțiunea 'get_template_part_{$slug}'.
Ceea ce îți permite să folosești locate_template()
, care spune:
Caută mai întâi în STYLESHEETPATH înainte de TEMPLATEPATH, astfel încât temele care moștenesc de la o temă părinte pot suprascrie doar un singur fișier.
Dacă definești TEMPLATEPATH
cu subdirectorul pe care dorești să-l folosești, get_template_part()
va căuta fișierele în subdirectorul tău.
