È possibile utilizzare get_template_part() con le cartelle?

6 feb 2013, 09:47:07
Visualizzazioni: 34.4K
Voti: 33

Mi chiedo se esiste un modo per utilizzare get_template_part() con le cartelle? La mia cartella principale ha ora molti file perché ho messo ogni elemento riutilizzabile in un file separato. Vorrei poterli organizzare in cartelle.

Non ci sono informazioni a riguardo nel Codex: http://codex.wordpress.org/Function_Reference/get_template_part

0
Tutte le risposte alla domanda 3
3
52

In effetti puoi farlo, ho una cartella nella directory del mio tema chiamata /partials/ e all'interno di questa cartella ho file come latest-articles.php, latest-news.php e latest-statements.php. Carico questi file utilizzando get_template_part() in questo modo:

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

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

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

Ricorda solo di omettere l'estensione .php dal nome del file.

6 feb 2013 10:18:20
Commenti

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

Atadj Atadj
6 feb 2013 15:30:12

Fortunatamente è possibile modificare il Codex, così la prossima persona non avrà lo stesso problema. :-)

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

@Sebastien Puoi effettivamente fare es:

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

HauntedSmores HauntedSmores
16 mag 2019 02:00:53
2

Purtroppo no. Se nel codex non trovi quello che cerchi, prova a seguire il link alla sorgente e dai un'occhiata tu stesso al codice per cercare di capirlo.

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

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 dedurre che la funzione get_template_part si limita a creare un nome di file php specifico e chiama la funzione locate_template. Questo non è molto utile, quindi ho guardato anche la 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;
}

La funzione locate_template cerca il file php specificato 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 nella cartella mydir all'interno del tuo tema):

locate_template( 'mydir/loop-single.php', true, true );
6 feb 2013 10:00:39
Commenti

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

lowtechsun lowtechsun
30 set 2017 03:42:10

get_template_part imposta $require_once su false per un motivo - OP vuole usare la funzione per chiamare parti riutilizzabili...

Isaac Lubow Isaac Lubow
2 giu 2020 10:06:11
0

Le note della funzione get_template_part() dicono:

Note
- Utilizza: locate_template()
- Utilizza: do_action() Chiama l'azione 'get_template_part_{$slug}'.

Ciò ti permette di utilizzare locate_template(), che dice:

Cerca prima in STYLESHEETPATH e poi in TEMPLATEPATH, così che i temi che ereditano da un tema genitore possano sovrascrivere un singolo file.

Se definisci TEMPLATEPATH con la sottodirectory che vuoi utilizzare, get_template_part() cercherà i file nella tua sottodirectory.

6 feb 2013 09:58:32