Există vreo modalitate de a folosi get_template_part() cu foldere?

6 feb. 2013, 09:47:07
Vizualizări: 34.4K
Voturi: 33

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

0
Toate răspunsurile la întrebare 3
3
52

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.

6 feb. 2013 10:18:20
Comentarii

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 Atadj
6 feb. 2013 15:30:12

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

Dalton Rooney Dalton Rooney
13 feb. 2013 19:34:32

@Sebastien Poți de fapt ex:

<?php get_template_part('partials/file'); ?>

HauntedSmores HauntedSmores
16 mai 2019 02:00:53
2

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 );
6 feb. 2013 10:00:39
Comentarii

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

lowtechsun lowtechsun
30 sept. 2017 03:42:10

get_template_part setează $require_once la false pentru un motiv - OP vrea să folosească funcția pentru a apela părți reutilizabile...

Isaac Lubow Isaac Lubow
2 iun. 2020 10:06:11
0

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.

6 feb. 2013 09:58:32