mirror of
git://develop.git.wordpress.org/
synced 2025-04-05 04:33:18 +02:00
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. git-svn-id: https://develop.svn.wordpress.org/trunk@58289 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
8a8499dcc7
commit
8c4be2687c
@ -236,6 +236,7 @@ class WP_Block {
|
||||
* block with the values of the `text_custom_field` and `url_custom_field` post meta.
|
||||
*
|
||||
* @since 6.5.0
|
||||
* @since 6.6.0 Handle the `__default` attribute for pattern overrides.
|
||||
*
|
||||
* @return array The computed block attributes for the provided block bindings.
|
||||
*/
|
||||
@ -259,7 +260,33 @@ class WP_Block {
|
||||
return $computed_attributes;
|
||||
}
|
||||
|
||||
foreach ( $parsed_block['attrs']['metadata']['bindings'] as $attribute_name => $block_binding ) {
|
||||
$bindings = $parsed_block['attrs']['metadata']['bindings'];
|
||||
|
||||
/*
|
||||
* If the default binding is set for pattern overrides, replace it
|
||||
* with a pattern override binding for all supported attributes.
|
||||
*/
|
||||
if (
|
||||
isset( $bindings['__default']['source'] ) &&
|
||||
'core/pattern-overrides' === $bindings['__default']['source']
|
||||
) {
|
||||
$updated_bindings = array();
|
||||
|
||||
/*
|
||||
* Build a binding array of all supported attributes.
|
||||
* Note that this also omits the `__default` attribute from the
|
||||
* resulting array.
|
||||
*/
|
||||
foreach ( $supported_block_attributes[ $parsed_block['blockName'] ] as $attribute_name ) {
|
||||
// Retain any non-pattern override bindings that might be present.
|
||||
$updated_bindings[ $attribute_name ] = isset( $bindings[ $attribute_name ] )
|
||||
? $bindings[ $attribute_name ]
|
||||
: array( 'source' => 'core/pattern-overrides' );
|
||||
}
|
||||
$bindings = $updated_bindings;
|
||||
}
|
||||
|
||||
foreach ( $bindings as $attribute_name => $block_binding ) {
|
||||
// If the attribute is not in the supported list, process next attribute.
|
||||
if ( ! in_array( $attribute_name, $supported_block_attributes[ $this->name ], true ) ) {
|
||||
continue;
|
||||
@ -413,7 +440,7 @@ class WP_Block {
|
||||
* There can be only one root interactive block at a time because the rendered HTML of that block contains
|
||||
* the rendered HTML of all its inner blocks, including any interactive block.
|
||||
*/
|
||||
static $root_interactive_block = null;
|
||||
static $root_interactive_block = null;
|
||||
/**
|
||||
* Filters whether Interactivity API should process directives.
|
||||
*
|
||||
|
@ -234,4 +234,32 @@ HTML;
|
||||
'The block content should be updated with the value returned by the source.'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests if the `__default` attribute is replaced with real attribues for
|
||||
* pattern overrides.
|
||||
*
|
||||
* @ticket 61333
|
||||
*
|
||||
* @covers WP_Block::process_block_bindings
|
||||
*/
|
||||
public function test_default_binding_for_pattern_overrides() {
|
||||
$expected_content = 'This is the content value';
|
||||
|
||||
$block_content = <<<HTML
|
||||
<!-- wp:paragraph {"metadata":{"bindings":{"__default":{"source":"core/pattern-overrides"}},"name":"Test"}} -->
|
||||
<p>This should not appear</p>
|
||||
<!-- /wp:paragraph -->
|
||||
HTML;
|
||||
|
||||
$parsed_blocks = parse_blocks( $block_content );
|
||||
$block = new WP_Block( $parsed_blocks[0], array( 'pattern/overrides' => array( 'Test' => array( 'content' => $expected_content ) ) ) );
|
||||
$result = $block->render();
|
||||
|
||||
$this->assertSame(
|
||||
"<p>$expected_content</p>",
|
||||
trim( $result ),
|
||||
'The `__default` attribute should be replaced with the real attribute prior to the callback.'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user