Different template for subcategories

I would like to have a different template for categories and subcategories The categories template is set in categories.php is it somehow possible to load the subcategories template from subcategories.php or something like that?

Topic template-hierarchy hierarchical categories Wordpress

Category Web


The template hierarchy has filters for all types of templates. Here we can use category_template, check if the current category has a parent, and load the subcategory.php file in that case:

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' );

I have edited your code to add more functionality. For cases where someone would want to have a different template for each child category. For example if you have categories ordered like this:

  • continent
    • country
      • city

And you need a different template for city. First we look if city has a child, if not we call the template for city. The rest of code is to check if a category has a 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' );

About

Geeks Mental is a community that publishes articles and tutorials about Web, Android, Data Science, new techniques and Linux security.