Czy jest jakiś sposób na użycie get_template_part () z folderami?

Odpowiedzi:

40

W rzeczywistości można, mam folder w moim katalogu tematycznego nazwie /partials/w tym folderze mam pliki, takie jak latest-articles.php, latest-news.phpa latest-statements.phpi załadować tych plików przy użyciu get_template_part()takich jak:

get_template_part('partials/latest', 'news');

get_template_part('partials/latest', 'articles');

get_template_part('partials/latest', 'statements');

Po prostu nie zapomnij pominąć .phpnazwy pliku.

Ahmad M.
źródło
Dzięki! To takie proste, że szkoda, że ​​tego nie odkryłem. Byłem przekonany, że nie jest to możliwe, ponieważ Codex o tym nie wspomina. To pytanie przyniosło ciekawsze odpowiedzi, ale to jest najprostsze, więc jest prawdopodobnie najbardziej przydatne dla przeciętnej osoby :) (niech więc będzie zaznaczone zielonym ptaszkiem).
Paul,
1
Na szczęście można edytować kodeks, aby kolejna osoba nie miała tego samego problemu. :-)
Dalton
@Sebastien Możesz faktycznie np .: <?php get_template_part('partials/file'); ?>
HauntedSmores
5

Obawiam się że nie. Jeśli w kodeksie nie ma czegoś, co chciałbyś wiedzieć, spróbuj użyć linku do źródła i zajrzyj do kodu i spróbuj go zarządzać.

Spojrzałem i funkcja get_template_part jest zdefiniowana jak poniżej:

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);
}

Z tego można odczytać, że funkcja get_template_part tworzy właśnie zamierzoną nazwę pliku php i wywołuje funkcję locate_template. Nie jest to przydatne, więc przyjrzałem się również funkcji 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;
}

Uzyskaj wyszukuje szablony lokalizacji pliku php wywołanego z get_template_part. Ale możesz wywołać locate_template bezpośrednio z twojego kodu. I to jest przydatne.

Wypróbuj ten kod zamiast funkcji get_template_part ('loop-sigle.php') (twój plik znajduje się w moim katalogu wewnątrz motywu):

locate_template( 'mydir/loop-single.php', true, true );
david.binda
źródło
Ciekawy skrót, zastanawiam się, czy ma to jakieś negatywne konsekwencje dla sekwencji ładowania lub zawartości pliku.
lowtechsun
2

Uwagi funkcji get_template_part()mówią:

Uwagi
- Zastosowania: locate_template ()
- Zastosowania: do współdziałania () Wywołuje akcję „get_template_part _ {$ slug}”.

Które pozwala ci skorzystać locate_template(), co mówi:

Wyszukuje ścieżkę STYLESHEETPATH ​​przed TEMPLATEPATH, więc motywy dziedziczące z motywu nadrzędnego mogą po prostu przeciążać jeden plik.

Jeśli określisz TEMPLATEPATHza pomocą podkatalogu, którego chcesz użyć, get_template_part()wyszuka pliki w tym podkatalogu.

Mike Madern
źródło