Automattic\WooCommerce\Blocks\Utils
BlockTemplateUtils::build_template_result_from_post()
Build a unified template object based a post Object. Important: This method is an almost identical duplicate from wp-includes/block-template-utils.php as it was not intended for public use. It has been modified to build templates from plugins rather than themes.
Method of the class: BlockTemplateUtils{}
No Hooks.
Return
\WP_Block_Template|\WP_Error
. Template.
Usage
$result = BlockTemplateUtils::build_template_result_from_post( $post );
- $post(\WP_Post) (required)
- Template post.
BlockTemplateUtils::build_template_result_from_post() BlockTemplateUtils::build template result from post code WC 9.4.2
public static function build_template_result_from_post( $post ) { $terms = get_the_terms( $post, 'wp_theme' ); if ( is_wp_error( $terms ) ) { return $terms; } if ( ! $terms ) { return new \WP_Error( 'template_missing_theme', __( 'No theme is defined for this template.', 'woocommerce' ) ); } $theme = $terms[0]->name; $has_theme_file = true; $template = new \WP_Block_Template(); $template->wp_id = $post->ID; $template->id = $theme . '//' . $post->post_name; $template->theme = $theme; $template->content = $post->post_content; $template->slug = $post->post_name; $template->source = 'custom'; $template->type = $post->post_type; $template->description = $post->post_excerpt; $template->title = $post->post_title; $template->status = $post->post_status; $template->has_theme_file = $has_theme_file; $template->is_custom = false; $template->post_types = array(); // Don't appear in any Edit Post template selector dropdown. if ( 'wp_template_part' === $post->post_type ) { $type_terms = get_the_terms( $post, 'wp_template_part_area' ); if ( ! is_wp_error( $type_terms ) && false !== $type_terms ) { $template->area = $type_terms[0]->name; } } // We are checking 'woocommerce' to maintain classic templates which are saved to the DB, // prior to updating to use the correct slug. // More information found here: https://github.com/woocommerce/woocommerce-gutenberg-products-block/issues/5423. if ( self::PLUGIN_SLUG === $theme || self::DEPRECATED_PLUGIN_SLUG === strtolower( $theme ) ) { $template->origin = 'plugin'; } /* * Run the block hooks algorithm introduced in WP 6.4 on the template content. */ if ( function_exists( 'inject_ignored_hooked_blocks_metadata_attributes' ) ) { $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; }