C'è un modo per usare get_template_part () con le cartelle?


Risposte:


40

In effetti è possibile, ho una cartella nella mia directory dei temi chiamata /partials/in quella cartella in cui ho file come latest-articles.php, latest-news.phpe latest-statements.phpcarico questi file usando get_template_part()come:

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

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

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

Non dimenticare di omettere il .phpnome del file.


Grazie! È così semplice che è un peccato non averlo scoperto. Ero convinto che ciò non fosse possibile perché il Codex non lo menziona. Questa domanda ha portato risposte più interessanti, ma questa è la più semplice, quindi è probabilmente la più utile per la persona media :) (quindi lascia che sia contrassegnata con un segno di spunta verde).
Paul,

1
Fortunatamente è possibile modificare il codice in modo che la persona successiva non abbia lo stesso problema. :-)
Dalton,

@Sebastien Puoi effettivamente es .: <?php get_template_part('partials/file'); ?>
HauntedSmores

5

Temo di no. Se nel codice non è qualcosa che vorresti sapere, prova a seguire il link alla fonte e dai un'occhiata al codice e prova a gestirlo.

Ho dato un'occhiata e la funzione get_template_part è definita come di seguito:

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

Da questo, puoi leggere, che la funzione get_template_part crea solo un nome file php previsto e chiama la funzione Locate_template. Questo non è utile, quindi ho dato un'occhiata anche alla funzione 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;
}

Ottieni ricerche di modelli per individuare il file php chiamato da get_template_part. Ma puoi chiamare Locate_template direttamente dal tuo codice. E questo è utile

Prova questo codice invece della funzione get_template_part ('loop-sigle.php') (il tuo file si trova in mydir all'interno del tuo tema):

locate_template( 'mydir/loop-single.php', true, true );

Scorciatoia interessante, mi chiedo se abbia conseguenze negative sulla sequenza di caricamento o sul contenuto del file.
lowtechsun,

2

Le note di funzione get_template_part()dicono:

Note
- Utilizza: Locate_template ()
- Utilizza: do_action () Chiama l'azione 'get_template_part _ {$ slug}'.

Che ti consente di utilizzare locate_template(), che dice:

Effettua ricerche nello STYLESHEETPATH ​​prima di TEMPLATEPATH in modo che i temi che ereditano da un tema principale possano semplicemente sovraccaricare un file.

Se si definisce TEMPLATEPATHcon la sottodirectory che si desidera utilizzare, get_template_part()cercherà i file nella sottodirectory.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.