How to Make Different Templates for Categories and Subcategories in WordPress

In the base template hierarchy, you can use the following category templates:

  • category-{slug}.php
  • category-{id}.php
  • categories.php

But, if you need to apply different php templates for categories and subcategories, you can use the category_template hook and check if the current category has a parent element, in which case load e.g. subcategory.php:

function wpz_subcategory_template( $template ) {
	if ( is_category() && 0 < get_queried_object()->category_parent ) {
		$template = locate_template( 'subcategory.php' );
	}
	return $template;
}
add_filter( 'category_template', 'wpz_subcategory_template' );

If your task is to make different templates for each nesting level, such as this:

  • continent
    • country
      • city

So, we have to use the following logic: first we look if the city has a child element, if not, we call the template for the city. The rest of the code is designed to check if the category has a parent element.

function wpz_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', 'wpz_subcategory_template' );

How useful is the publication?

Click on a star to rate it!

Average score 3.5 / 5. Number of grades: 2

No ratings yet. Rate it first.

Similar posts

How to add pagination for pages or cpt using WP_Query()

WordPress is designed so that you can paginate any query for posts from the database using WP_Query(), because the necessary ‘paged’ and ‘posts_per_page’ arguments are already present in the query. By pagination we mean page navigation. For example, if we specify the output of 10 posts per page and the WP_Query() response returns information about…
Read more

How to exclude pages, categories, or author from search results in WordPress

By default, the search functionality in WordPress shows all record types and pages in the results. You may want to remove pages, categories, taxonomies, or posts by a specific author from your search. To do this, we need to fix the main is_search() query on the pre_get_posts hook. Let’s see some examples. How to hide…
Read more

How to change the number of entries on the search page in WordPress

By default, the number of entries on the search results page in WordPress is taken from the read settings in the admin. You can change this global request by using the pre_get_posts hook. In the example below, we’ll set it to display 50 entries on the search.php search results page:
Read more