web-dev-qa-db-fra.com

Modèle différent pour les articles de toutes les sous-catégories de la catégorie

Je souhaite utiliser un modèle différent pour les publications de toutes les sous-catégories d'une catégorie. Vous trouverez ci-dessous le code que j'utilise:

add_filter( 'single_template', 'get_custom_cat_template' ) ;
function get_custom_cat_template( $single_template ) {
    global $post;
    if ( is_category( 'blog' ) || in_category( 'blog' ) ) {
        $single_template = dirname( __FILE__ ) . '/single-blog.php';
    }

    return $single_template;
}

Ici, "blog" est la catégorie. Ce code ne fonctionne que pour la catégorie parent (blog). Pour les publications de la sous-catégorie, il est en train de charger le fichier par défaut single.php.

Comment puis-je modifier le code afin qu'il fonctionne pour toutes les sous-catégories de la catégorie parent?

1
Rajpreet

Vous pouvez vérifier si la catégorie actuelle est un enfant de la catégorie blog avec cat_is_ancestor_of() function ou term_is_ancestor_of() , ou peut-être mieux, utilisez in_category(), comme vous le faites actuellement, tout en vérifiant également les catégories enfants.

add_filter( 'single_template', 'get_custom_cat_template' ) ;
function get_custom_cat_template( $single_template ) {


    // You want to filter only template for single posts of default post type    
    if( is_singular( 'post' ) ) {

        $post = get_queried_object();
        // Replace '3' with the ID of the 'blog' category
        $child_blog_categories = get_term_children( '3', 'category' );

        if ( in_category( 'blog', $post ) || in_category( $child_blog_categories, $post ) ) {

            $single_template = locate_template( 'single-blog.php' );

        }

    }

    return $single_template;
}

Quoi qu'il en soit, je pense que si vous vous voyez en train de créer une catégorie de publications pour gérer les publications dans cette catégorie d'une manière différente, vous pouvez vérifier les types de publication personnalisés.

3
cybmeta