wppaste
WordPress

resolve_block_template( string $template_type, string[] $template_hierarchy, string $fallback_template ): WP_Block_Template|null

Since
5.8.0, 5.9.0
Source
wp-includes/block-template.php:153
Returns the correct 'wp_template' to render for the request template type.

Parameters

$template_typestring
The current template type.
$template_hierarchystring[]
The current template hierarchy, ordered by priority.
$fallback_templatestring
A PHP fallback template to use if no matching block template is found.

Return

WP_Block_Template|null
template A template object, or null if none could be found.

Uses · 7

Used by · 3

Source

function resolve_block_template( $template_type, $template_hierarchy, $fallback_template ) {	if ( ! $template_type ) {		return null;	} 	if ( empty( $template_hierarchy ) ) {		$template_hierarchy = array( $template_type );	} 	$slugs = array_map(		'_strip_template_file_suffix',		$template_hierarchy	); 	// Find all potential templates 'wp_template' post matching the hierarchy.	$query     = array(		'slug__in' => $slugs,	);	$templates = get_block_templates( $query ); 	// Order these templates per slug priority.	// Build map of template slugs to their priority in the current hierarchy.	$slug_priorities = array_flip( $slugs ); 	usort(		$templates,		static function ( $template_a, $template_b ) use ( $slug_priorities ) {			return $slug_priorities[ $template_a->slug ] - $slug_priorities[ $template_b->slug ];		}	); 	$theme_base_path        = get_stylesheet_directory() . DIRECTORY_SEPARATOR;	$parent_theme_base_path = get_template_directory() . DIRECTORY_SEPARATOR; 	// Is the active theme a child theme, and is the PHP fallback template part of it?	if (		str_starts_with( $fallback_template, $theme_base_path ) &&		! str_contains( $fallback_template, $parent_theme_base_path )	) {		$fallback_template_slug = substr(			$fallback_template,			// Starting position of slug.			strpos( $fallback_template, $theme_base_path ) + strlen( $theme_base_path ),			// Remove '.php' suffix.			-4		); 		// Is our candidate block template's slug identical to our PHP fallback template's?		if (			count( $templates ) &&			$fallback_template_slug === $templates[0]->slug &&			'theme' === $templates[0]->source		) {			// Unfortunately, we cannot trust $templates[0]->theme, since it will always			// be set to the active theme's slug by _build_block_template_result_from_file(),			// even if the block template is really coming from the active theme's parent.			// (The reason for this is that we want it to be associated with the active theme			// -- not its parent -- once we edit it and store it to the DB as a wp_template CPT.)			// Instead, we use _get_block_template_file() to locate the block template file.			$template_file = _get_block_template_file( 'wp_template', $fallback_template_slug );			if ( $template_file && get_template() === $template_file['theme'] ) {				// The block template is part of the parent theme, so we				// have to give precedence to the child theme's PHP template.				array_shift( $templates );			}		}	} 	return count( $templates ) ? $templates[0] : null;}

History

Introduced in 5.8.0. Unchanged from 6.7.7 through 7.1.0.

  1. 6.7.7
  2. 6.8.8
  3. 6.9.7
  4. 7.0.4
  5. 7.1.0

Signature, return type and hooks compared across 5 parsed releases.

5.9.0
Added the $fallback_template parameter.from the docblock
5.8.0
Introduced.from the docblock

About this page

Parsed data
Generated from the wordpress-develop 6.9.7 tag, from src/wp-includes/block-template.php, and regenerated for each WordPress release so it tracks the code rather than a snapshot of it.
Corrections
Something wrong on this page? Report it and it gets fixed in the next regeneration.