È possibile utilizzare get_template_part() con le cartelle?
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

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.

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).

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

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

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

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.
