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 Reply

Your email address will not be published. Required fields are marked *