declare( strict_types=1 );
namespace Automattic\WooCommerce\Blocks\Templates;
use Automattic\WooCommerce\Blocks\Utils\BlockTemplateUtils;
* AbstractTemplateWithFallback class.
* Shared logic for templates with fallbacks.
abstract class AbstractTemplateWithFallback extends AbstractTemplate {
* The fallback template to render if the existing template is not available.
public string $fallback_template;
add_filter( 'taxonomy_template_hierarchy', array( $this, 'template_hierarchy' ), 1 );
add_action( 'template_redirect', array( $this, 'render_block_template' ) );
* Add the fallback template to the hierarchy, right after the current template.
* @param array $templates Templates that match the taxonomy_template_hierarchy.
public function template_hierarchy( $templates ) {
$index = array_search( static::SLUG, $templates, true );
if ( false === $index ) {
$index = array_search( static::SLUG . '.php', $templates, true );
! array_key_exists( $index + 1, $templates ) || $templates[ $index + 1 ] !== $this->fallback_template
array_splice( $templates, $index + 1, 0, $this->fallback_template );
* Render the block template.
abstract public function render_block_template();