How to make child categories recognize parent’s template displays

I’m using the Default Post Type post for various purposes. To sort them I’m using different categories. And I’m designing different category layout using the slug preference, like: category-book.php, category-notice.php etc., and everything was just fine.

But just a moment ago found that, any subcategory of the parent category ‘book’ is redirecting to index.php (or archive.php, or category.php) because they are not recognizing their parent’s category template (category-book.php), because their slug is different.

How can I make the child categories recognize their parent’s template design?
Do I have to make a custom template using a WP_Query() for that?

3 s
3

Thanks to @Rarst for guiding me to the right direction. Using his direction I googled again and again and found a blog article of WerdsWords with an excellent bit of code snippet filtered to category_template as Rarst suggested me, and the good news is: it worked for my cause:

function new_subcategory_hierarchy() { 
    $category = get_queried_object();

    $parent_id = $category->category_parent;

    $templates = array();

    if ( $parent_id == 0 ) {
        // Use default values from get_category_template()
        $templates[] = "category-{$category->slug}.php";
        $templates[] = "category-{$category->term_id}.php";
        $templates[] = 'category.php';     
    } else {
        // Create replacement $templates array
        $parent = get_category( $parent_id );

        // Current first
        $templates[] = "category-{$category->slug}.php";
        $templates[] = "category-{$category->term_id}.php";

        // Parent second
        $templates[] = "category-{$parent->slug}.php";
        $templates[] = "category-{$parent->term_id}.php";
        $templates[] = 'category.php'; 
    }
    return locate_template( $templates );
}

add_filter( 'category_template', 'new_subcategory_hierarchy' );

Link to the article:

  • Force sub-categories to use the parent category template — werdswords.com

Leave a Comment