1

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?

3

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( 0 < $cat->category_parent )
        $template = locate_template( 'subcategory.php' );
    return $template;
}
add_filter( 'category_template', 'wpd_subcategory_template' );
  • I think this is exactly what im looking for. Where do i need to put the code? – TBHM admin Nov 25 '16 at 11:40
  • In your theme's functions.php or in a plugin. – Milo Nov 25 '16 at 11:43
2

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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.