get_template_hierarchy()WP 6.1.0

Gets the template hierarchy for the given template slug to be created.

Note: Always add index as the last fallback template.

No Hooks.

Return

String[]. The template hierarchy.

Usage

get_template_hierarchy( $slug, $is_custom, $template_prefix );
$slug(string) (required)
The template slug to be created.
$is_custom(true|false)
Indicates if a template is custom or part of the template hierarchy.
Default: false
$template_prefix(string)
The template prefix for the created template. Used to extract the main template type, e.g. in taxonomy-books the taxonomy is extracted.
Default: empty string

Changelog

Since 6.1.0 Introduced.

Code of get_template_hierarchy() WP 6.1.1

function get_template_hierarchy( $slug, $is_custom = false, $template_prefix = '' ) {
	if ( 'index' === $slug ) {
		return array( 'index' );
	}
	if ( $is_custom ) {
		return array( 'page', 'singular', 'index' );
	}
	if ( 'front-page' === $slug ) {
		return array( 'front-page', 'home', 'index' );
	}

	$template_hierarchy = array( $slug );

	// Most default templates don't have `$template_prefix` assigned.
	if ( $template_prefix ) {
		list( $type ) = explode( '-', $template_prefix );
		// These checks are needed because the `$slug` above is always added.
		if ( ! in_array( $template_prefix, array( $slug, $type ), true ) ) {
			$template_hierarchy[] = $template_prefix;
		}
		if ( $slug !== $type ) {
			$template_hierarchy[] = $type;
		}
	}

	// Handle `archive` template.
	if (
		str_starts_with( $slug, 'author' ) ||
		str_starts_with( $slug, 'taxonomy' ) ||
		str_starts_with( $slug, 'category' ) ||
		str_starts_with( $slug, 'tag' ) ||
		'date' === $slug
	) {
		$template_hierarchy[] = 'archive';
	}
	// Handle `single` template.
	if ( 'attachment' === $slug ) {
		$template_hierarchy[] = 'single';
	}

	// Handle `singular` template.
	if (
		str_starts_with( $slug, 'single' ) ||
		str_starts_with( $slug, 'page' ) ||
		'attachment' === $slug
	) {
		$template_hierarchy[] = 'singular';
	}

	$template_hierarchy[] = 'index';

	return $template_hierarchy;
};