Make WordPress Core

Changeset 58289

Timestamp:
06/03/2024 07:42:57 AM (2 months ago)
Author:
isabel_brison
Message:

Editor: Add block bindings support for a __default attribute for pattern overrides.

Adds handling for a __default block binding attribute for pattern overrides that dynamically adds support for all supported block binding attributes.

Props talldanwp, petitphp, mukesh27, isabel_brison, kevin940726.
Fixes #61333.

Location:
trunk
Files:
2 edited

Legend:

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

    r58234 r58289  
    237237     *
    238238     * @since 6.5.0
     239
    239240     *
    240241     * @return array The computed block attributes for the provided block bindings.
     
    260261        }
    261262
    262         foreach ( $parsed_block['attrs']['metadata']['bindings'] as $attribute_name => $block_binding ) {
     263        $bindings = $parsed_block['attrs']['metadata']['bindings'];
     264
     265        /*
     266         * If the default binding is set for pattern overrides, replace it
     267         * with a pattern override binding for all supported attributes.
     268         */
     269        if (
     270            isset( $bindings['__default']['source'] ) &&
     271            'core/pattern-overrides' === $bindings['__default']['source']
     272        ) {
     273            $updated_bindings = array();
     274
     275            /*
     276             * Build a binding array of all supported attributes.
     277             * Note that this also omits the `__default` attribute from the
     278             * resulting array.
     279             */
     280            foreach ( $supported_block_attributes[ $parsed_block['blockName'] ] as $attribute_name ) {
     281                // Retain any non-pattern override bindings that might be present.
     282                $updated_bindings[ $attribute_name ] = isset( $bindings[ $attribute_name ] )
     283                    ? $bindings[ $attribute_name ]
     284                    : array( 'source' => 'core/pattern-overrides' );
     285            }
     286            $bindings = $updated_bindings;
     287        }
     288
     289        foreach ( $bindings as $attribute_name => $block_binding ) {
    263290            // If the attribute is not in the supported list, process next attribute.
    264291            if ( ! in_array( $attribute_name, $supported_block_attributes[ $this->name ], true ) ) {
     
    414441         * the rendered HTML of all its inner blocks, including any interactive block.
    415442         */
    416         static $root_interactive_block  = null;
     443        static $root_interactive_block = null;
    417444        /**
    418445         * Filters whether Interactivity API should process directives.
  • trunk/tests/phpunit/tests/block-bindings/render.php

    r57754 r58289  
    235235        );
    236236    }
     237
     238
     239
     240
     241
     242
     243
     244
     245
     246
     247
     248
     249
     250
     251
     252
     253
     254
     255
     256
     257
     258
     259
     260
     261
     262
     263
     264
    237265}
Note: See TracChangeset for help on using the changeset viewer.