Template diverso per sottocategorie

25 nov 2016, 12:55:19
Visualizzazioni: 14K
Voti: 6

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?

0
Tutte le risposte alla domanda 2
4
11

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' );
25 nov 2016 13:35:27
Commenti

Penso che sia esattamente quello che sto cercando. Dove devo inserire il codice?

TBHM admin TBHM admin
25 nov 2016 13:40:55

Nel file functions.php del tuo tema oppure in un plugin.

Milo Milo
25 nov 2016 13:43:02

devi semplicemente sostituire subcategory.php con il file che vuoi diventare il template genitore

Marco V Marco V
10 gen 2020 18:26:36

@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 Rup
12 feb 2022 17:29:41
0

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à

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' );
21 giu 2017 13:21:41