diff --git a/src/wp-includes/block-template-utils.php b/src/wp-includes/block-template-utils.php index b8538ee3b43e2..360d2419b4979 100644 --- a/src/wp-includes/block-template-utils.php +++ b/src/wp-includes/block-template-utils.php @@ -513,6 +513,26 @@ function _inject_theme_attribute_in_block_template_content( $template_content ) return $template_content; } +/** + * Injects the active theme's stylesheet as a `theme` attribute + * into a given template part block. + * + * @since 6.4.0 + * @access private + * + * @param array $block a parsed block. + * @return array Updated block. + */ +function _inject_theme_attribute_in_block_template_block( $block ) { + if ( + 'core/template-part' === $block['blockName'] && + ! isset( $block['attrs']['theme'] ) + ) { + $block['attrs']['theme'] = get_stylesheet(); + } + return $block; +} + /** * Parses a block template and removes the theme attribute from each template part. * @@ -565,7 +585,6 @@ function _build_block_template_result_from_file( $template_file, $template_type $template = new WP_Block_Template(); $template->id = $theme . '//' . $template_file['slug']; $template->theme = $theme; - $template->content = _inject_theme_attribute_in_block_template_content( $template_content ); $template->slug = $template_file['slug']; $template->source = 'theme'; $template->type = $template_type; @@ -589,6 +608,9 @@ function _build_block_template_result_from_file( $template_file, $template_type $template->area = $template_file['area']; } + $blocks = parse_blocks( $template_content ); + $template->content = serialize_blocks( $blocks, '_inject_theme_attribute_in_block_template_block' ); + return $template; }