Automattic\WooCommerce\Blocks\Utils

BlockTemplateUtils::build_template_result_from_file()public staticWC 1.0

Build a unified template object based on a theme file.

Method of the class: BlockTemplateUtils{}

No Hooks.

Return

\WP_Block_Template. Template.

Usage

$result = BlockTemplateUtils::build_template_result_from_file( $template_file, $template_type );
$template_file(array|object) (required)
Theme file.
$template_type(string) (required)
wp_template or wp_template_part.

BlockTemplateUtils::build_template_result_from_file() code WC 9.4.2

public static function build_template_result_from_file( $template_file, $template_type ) {
	$template_file = (object) $template_file;

	// If the theme has an archive-products.html template but does not have product taxonomy templates
	// then we will load in the archive-product.html template from the theme to use for product taxonomies on the frontend.
	$template_is_from_theme = 'theme' === $template_file->source;
	$theme_name             = wp_get_theme()->get( 'TextDomain' );

	// phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents
	$template_content  = file_get_contents( $template_file->path );
	$template          = new \WP_Block_Template();
	$template->id      = $template_is_from_theme ? $theme_name . '//' . $template_file->slug : self::PLUGIN_SLUG . '//' . $template_file->slug;
	$template->theme   = $template_is_from_theme ? $theme_name : self::PLUGIN_SLUG;
	$template->content = self::inject_theme_attribute_in_content( $template_content );
	// Remove the term description block from the archive-product template
	// as the Product Catalog/Shop page doesn't have a description.
	if ( ProductCatalogTemplate::SLUG === $template_file->slug ) {
		$template->content = str_replace( '<!-- wp:term-description {"align":"wide"} /-->', '', $template->content );
	}
	// Plugin was agreed as a valid source value despite existing inline docs at the time of creating: https://github.com/WordPress/gutenberg/issues/36597#issuecomment-976232909.
	$template->source         = $template_file->source ? $template_file->source : 'plugin';
	$template->slug           = $template_file->slug;
	$template->type           = $template_type;
	$template->title          = ! empty( $template_file->title ) ? $template_file->title : self::get_block_template_title( $template_file->slug );
	$template->description    = ! empty( $template_file->description ) ? $template_file->description : self::get_block_template_description( $template_file->slug );
	$template->status         = 'publish';
	$template->has_theme_file = true;
	$template->origin         = $template_file->source;
	$template->is_custom      = false; // Templates loaded from the filesystem aren't custom, ones that have been edited and loaded from the DB are.
	$template->post_types     = array(); // Don't appear in any Edit Post template selector dropdown.
	$template->area           = self::get_block_template_area( $template->slug, $template_type );

	/*
	* Run the block hooks algorithm introduced in WP 6.4 on the template content.
	*/
	if ( function_exists( 'inject_ignored_hooked_blocks_metadata_attributes' ) ) {
		$before_block_visitor = '_inject_theme_attribute_in_template_part_block';
		$after_block_visitor  = null;
		$hooked_blocks        = get_hooked_blocks();
		if ( ! empty( $hooked_blocks ) || has_filter( 'hooked_block_types' ) ) {
			$before_block_visitor = make_before_block_visitor( $hooked_blocks, $template );
			$after_block_visitor  = make_after_block_visitor( $hooked_blocks, $template );
		}
		$blocks            = parse_blocks( $template->content );
		$template->content = traverse_and_serialize_blocks( $blocks, $before_block_visitor, $after_block_visitor );
	}

	return $template;
}