web-dev-qa-db-fra.com

Modèle différent pour les sous-catégories

J'aimerais avoir un modèle différent pour les catégories et les sous-catégories. Le modèle de catégories est défini dans categories.php. Est-il possible de charger le modèle de sous-catégories à partir de subcategories.php ou quelque chose du genre?

1
TBHM admin

La hiérarchie de modèles contient des filtres pour tous les types de modèles. Ici, nous pouvons utiliser category_template, vérifier si la catégorie actuelle a un parent et charger le fichier subcategory.php dans ce cas:

function wpd_subcategory_template( $template ) {
    $cat = get_queried_object();
    if( 0 < $cat->category_parent )
        $template = locate_template( 'subcategory.php' );
    return $template;
}
add_filter( 'category_template', 'wpd_subcategory_template' );
2
Milo

J'ai édité votre code pour ajouter plus de fonctionnalités. Pour les cas où quelqu'un voudrait avoir un modèle différent pour chaque catégorie d'enfants. Par exemple, si vous avez des catégories ordonnées comme ceci:

  • continent
    • pays
      • ville

Et vous avez besoin d'un modèle différent pour la ville. Nous examinons d’abord si la ville a un enfant, sinon nous appelons le modèle pour la ville. Le reste du code consiste à vérifier si une catégorie a un parent.

// Different template for subcategories
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' );
1
user3751604