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).
Atadj
Din fericire, este posibil să editezi Codex, astfel încât următoarea persoană nu va avea aceeași problemă. :-)
Dalton Rooney
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.
lowtechsun
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.