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 transfer a site from dle to WordPress?

Transferring a website from DLE (DataLife Engine) to WordPress can be a complex process, especially if the site has a lot of content. Here’s a step-by-step guide: 1. Preparation 2. Export Data from DLE DLE uses its own database structure, so you’ll need to export data and convert it into a format compatible with WordPress:…
Read more