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 check if a folder exists in php, wordpress

To check if a folder exists in PHP, you can use the is_dir() function. This function returns true if the path is an existing directory and false otherwise. Example: In the context of WordPress, you can also use built-in WordPress functions for working with files and directories. For example, the wp_mkdir_p() function will create a…
Read more

How to shuffle an array while preserving keys in php, wordpress

In PHP (including WordPress), you can shuffle an array while preserving its keys by using a custom function. The standard shuffle() function resets the array keys, so you need a different approach. Here’s one way to shuffle an array while preserving its keys: This shuffle_assoc() function first extracts the array keys, shuffles them using shuffle(),…
Read more

How to remove all get parameters from a string in php, WordPress

To remove all GET parameters from a URL in PHP, including in WordPress, you can use the parse_url function to parse the URL, and then reconstruct it without the query parameters. In WordPress, you can also use built-in functions for URL manipulation. Example in plain PHP: Example for WordPress: In WordPress, you can use the…
Read more