Plantilla diferente para subcategorías en WordPress

25 nov 2016, 12:55:19
Vistas: 14K
Votos: 6

Me gustaría tener una plantilla diferente para categorías y subcategorías. La plantilla de categorías está configurada en categories.php ¿Es posible de alguna manera cargar la plantilla de subcategorías desde subcategories.php o algo similar?

0
Todas las respuestas a la pregunta 2
4
11

La jerarquía de plantillas tiene filtros para todos los tipos de plantillas. Aquí podemos usar category_template, verificar si la categoría actual tiene un padre, y cargar el archivo subcategory.php en ese 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
Comentarios

Creo que esto es exactamente lo que estoy buscando. ¿Dónde necesito poner el código?

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

En el archivo functions.php de tu tema o en un plugin.

Milo Milo
25 nov 2016 13:43:02

solo necesitas reemplazar subcategory.php por el archivo que deseas que sea la plantilla padre

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

@Djanym RE tu edición sugerida para probar isset( $cat ) primero: En general aprecio la precaución, pero ¿en qué circunstancias se puede llamar a category_template cuando get_queried_object() es nulo?

Rup Rup
12 feb 2022 17:29:41
0

He editado tu código para añadir más funcionalidad. Para los casos en los que alguien quisiera tener una plantilla diferente para cada categoría hija. Por ejemplo, si tienes categorías organizadas así:

  • continente
    • país
      • ciudad

Y necesitas una plantilla diferente para ciudad. Primero comprobamos si ciudad tiene hijos, si no los tiene cargamos la plantilla para ciudad. El resto del código es para comprobar si una categoría tiene un padre.

// Plantilla diferente para subcategorías
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-pais-ciudad.php' );
    } elseif( 0 < $cat->category_parent ) {
        $template = locate_template( 'category-pais.php' );
    }

    return $template;
}
add_filter( 'category_template', 'wpd_subcategory_template' );
21 jun 2017 13:21:41