WordPress Version: 6.5
/**
* Builds a unified template object based on a theme file.
*
* @since 5.9.0
* @since 6.3.0 Added `modified` property to template objects.
* @access private
*
* @param array $template_file Theme file.
* @param string $template_type Template type. Either 'wp_template' or 'wp_template_part'.
* @return WP_Block_Template Template.
*/
function _build_block_template_result_from_file($template_file, $template_type)
{
$default_template_types = get_default_block_template_types();
$theme = get_stylesheet();
$template = new WP_Block_Template();
$template->id = $theme . '//' . $template_file['slug'];
$template->theme = $theme;
$template->content = file_get_contents($template_file['path']);
$template->slug = $template_file['slug'];
$template->source = 'theme';
$template->type = $template_type;
$template->title = (!empty($template_file['title'])) ? $template_file['title'] : $template_file['slug'];
$template->status = 'publish';
$template->has_theme_file = true;
$template->is_custom = true;
$template->modified = null;
if ('wp_template' === $template_type && isset($default_template_types[$template_file['slug']])) {
$template->description = $default_template_types[$template_file['slug']]['description'];
$template->title = $default_template_types[$template_file['slug']]['title'];
$template->is_custom = false;
}
if ('wp_template' === $template_type && isset($template_file['postTypes'])) {
$template->post_types = $template_file['postTypes'];
}
if ('wp_template_part' === $template_type && isset($template_file['area'])) {
$template->area = $template_file['area'];
}
$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;
}