Automattic\WooCommerce\Blocks\Utils
BlockTemplateUtils::build_template_result_from_file()
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() 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; }