Make WordPress Core


Ignore:
Timestamp:
09/14/2023 08:50:43 AM (19 months ago)
Author:
Bernhard Reiter
Message:

Themes: Inject theme attribute during serialization.

Rather than using _inject_theme_attribute_in_block_template_content to inject the theme attribute into all Template Part blocks found in a given file-based Block Template, introduce a new function called _inject_theme_attribute_in_template_part_block, and use that as second argument to serialize_blocks() (introduced in [56557]) in order to inject said attribute during tree traversal for serialization.

This allows for a more modular approach that will eventually be extended to implement automatic insertion of hooked blocks.

Note that we're guarding _build_block_template_result_from_file() (i.e. the callsite of _inject_theme_attribute_in_template_part_block and previously of _inject_theme_attribute_in_block_template_content) against regressions through additional unit test coverage added in [56562].

Props @gziolo.
Fixes #59338. See #59313.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/block-template-utils.php

    r56414 r56578  
    515515
    516516/**
     517 * Injects the active theme's stylesheet as a `theme` attribute
     518 * into a given template part block.
     519 *
     520 * @since 6.4.0
     521 * @access private
     522 *
     523 * @param array $block a parsed block.
     524 * @return array Updated block.
     525 */
     526function _inject_theme_attribute_in_template_part_block( $block ) {
     527    if (
     528        'core/template-part' === $block['blockName'] &&
     529        ! isset( $block['attrs']['theme'] )
     530    ) {
     531        $block['attrs']['theme'] = get_stylesheet();
     532    }
     533    return $block;
     534}
     535
     536/**
    517537 * Parses a block template and removes the theme attribute from each template part.
    518538 *
     
    566586    $template->id             = $theme . '//' . $template_file['slug'];
    567587    $template->theme          = $theme;
    568     $template->content        = _inject_theme_attribute_in_block_template_content( $template_content );
    569588    $template->slug           = $template_file['slug'];
    570589    $template->source         = 'theme';
     
    589608        $template->area = $template_file['area'];
    590609    }
     610
     611    $blocks            = parse_blocks( $template_content );
     612    $template->content = serialize_blocks( $blocks, '_inject_theme_attribute_in_template_part_block' );
    591613
    592614    return $template;
Note: See TracChangeset for help on using the changeset viewer.