Șablon diferit pentru subcategorii

25 nov. 2016, 12:55:19
Vizualizări: 14K
Voturi: 6

Aș dori să am un șablon diferit pentru categorii și subcategorii Șablonul pentru categorii este setat în categories.php Este cumva posibil să încărcăm șablonul pentru subcategorii din subcategories.php sau ceva similar?

0
Toate răspunsurile la întrebare 2
4
11

Ierarhia de șabloane are filtre pentru toate tipurile de șabloane. Aici putem folosi category_template, verificăm dacă categoria curentă are un părinte și încărcăm fișierul subcategory.php în acest caz:

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
Comentarii

Cred că exact asta caut. Unde trebuie să pun codul?

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

În fișierul functions.php al temei tale sau într-un plugin.

Milo Milo
25 nov. 2016 13:43:02

trebuie doar să înlocuiești subcategory.php cu fișierul pe care vrei să devină template-ul părinte

Marco V Marco V
10 ian. 2020 18:26:36

@Djanym RE sugestia ta de editare să testezi mai întâi isset( $cat ): În general apreciez precauția, dar în ce circumstanțe poate fi apelat category_template când get_queried_object() este null?

Rup Rup
12 feb. 2022 17:29:41
0

Am editat codul tău pentru a adăuga mai multă funcționalitate. Pentru cazurile în care cineva ar dori să aibă un șablon diferit pentru fiecare subcategorie. De exemplu, dacă ai categorii organizate astfel:

  • continent
    • țară
      • oraș

Și ai nevoie de un șablon diferit pentru oraș. Mai întâi verificăm dacă orașul are o subcategorie, dacă nu, apelăm șablonul pentru oraș. Restul codului verifică dacă o categorie are un părinte.

// Șablon diferit pentru subcategorii
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 iun. 2017 13:21:41