Template diverso per sottocategorie
Vorrei avere un template diverso per categorie e sottocategorie Il template per le categorie è impostato in categories.php È possibile in qualche modo caricare il template per le sottocategorie da subcategories.php o qualcosa di simile?
La gerarchia dei template ha dei filtri per tutti i tipi di template. Qui possiamo usare category_template, verificare se la categoria corrente ha un genitore e caricare il file subcategory.php in quel caso:
function wpd_subcategory_template( $template ) {
$cat = get_queried_object();
if ( isset( $cat ) && $cat->category_parent ) {
$template = locate_template( 'subcategory.php' );
}
return $template;
}
add_filter( 'category_template', 'wpd_subcategory_template' );
Penso che sia esattamente quello che sto cercando. Dove devo inserire il codice?
TBHM admin
Nel file functions.php del tuo tema oppure in un plugin.
Milo
devi semplicemente sostituire subcategory.php con il file che vuoi diventare il template genitore
Marco V
@Djanym Riguardo la tua modifica suggerita per testare prima isset( $cat ): Apprezzo generalmente la cautela, ma in quali circostanze category_template può essere chiamato quando get_queried_object() è null?
Rup
Ho modificato il tuo codice per aggiungere più funzionalità. Per i casi in cui qualcuno volesse avere un template diverso per ogni sottocategoria. Ad esempio, se hai le categorie organizzate in questo modo:
- continente
- paese
- città
- paese
E hai bisogno di un template diverso per la città. Per prima cosa controlliamo se la città ha una sottocategoria, se non ce l'ha carichiamo il template per la città. Il resto del codice serve per verificare se una categoria ha un genitore.
// Template diverso per le sottocategorie
function wpd_subcategory_template( $template ) {
$cat = get_queried_object();
$children = get_terms( $cat->taxonomy, array(
'parent' => $cat->term_id,
'hide_empty' => false
) );
if( ! $children ) {
$template = locate_template( 'category-country-city.php' );
} elseif( 0 < $cat->category_parent ) {
$template = locate_template( 'category-country.php' );
}
return $template;
}
add_filter( 'category_template', 'wpd_subcategory_template' );