Changeset 60611
- Timestamp:
- 08/06/2025 06:20:22 PM (5 months ago)
- Location:
- trunk
- Files:
-
- 2 edited
-
src/wp-includes/class-wp-block.php (modified) (5 diffs)
-
tests/phpunit/tests/block-bindings/render.php (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/wp-includes/class-wp-block.php
r60539 r60611 98 98 */ 99 99 public $inner_content = array(); 100 101 /** 102 * List of supported block attributes for block bindings. 103 * 104 * @since 6.9.0 105 * @var array 106 * 107 * @see WP_Block::process_block_bindings() 108 */ 109 private const BLOCK_BINDINGS_SUPPORTED_ATTRIBUTES = array( 110 'core/paragraph' => array( 'content' ), 111 'core/heading' => array( 'content' ), 112 'core/image' => array( 'id', 'url', 'title', 'alt' ), 113 'core/button' => array( 'url', 'text', 'linkTarget', 'rel' ), 114 'core/post-date' => array( 'datetime' ), 115 ); 100 116 101 117 /** … … 279 295 */ 280 296 private function process_block_bindings() { 297 $block_type = $this->name; 281 298 $parsed_block = $this->parsed_block; 282 299 $computed_attributes = array(); 283 $supported_block_attributes = array( 284 'core/paragraph' => array( 'content' ), 285 'core/heading' => array( 'content' ), 286 'core/image' => array( 'id', 'url', 'title', 'alt' ), 287 'core/button' => array( 'url', 'text', 'linkTarget', 'rel' ), 288 'core/post-date' => array( 'datetime' ), 300 301 $supported_block_attributes = 302 self::BLOCK_BINDINGS_SUPPORTED_ATTRIBUTES[ $block_type ] ?? 303 array(); 304 305 /** 306 * Filters the supported block attributes for block bindings. 307 * 308 * The dynamic portion of the hook name, `$block_type`, refers to the block type 309 * whose attributes are being filtered. 310 * 311 * @since 6.9.0 312 * 313 * @param string[] $supported_block_attributes The block's attributes that are supported by block bindings. 314 */ 315 $supported_block_attributes = apply_filters( 316 "block_bindings_supported_attributes_{$block_type}", 317 $supported_block_attributes 289 318 ); 290 319 … … 292 321 // block types, or the bindings property is not an array, return the block content. 293 322 if ( 294 ! isset( $supported_block_attributes[ $this->name ]) ||323 empty( $supported_block_attributes ) || 295 324 empty( $parsed_block['attrs']['metadata']['bindings'] ) || 296 325 ! is_array( $parsed_block['attrs']['metadata']['bindings'] ) … … 316 345 * resulting array. 317 346 */ 318 foreach ( $supported_block_attributes [ $parsed_block['blockName'] ]as $attribute_name ) {347 foreach ( $supported_block_attributes as $attribute_name ) { 319 348 // Retain any non-pattern override bindings that might be present. 320 349 $updated_bindings[ $attribute_name ] = isset( $bindings[ $attribute_name ] ) … … 335 364 foreach ( $bindings as $attribute_name => $block_binding ) { 336 365 // If the attribute is not in the supported list, process next attribute. 337 if ( ! in_array( $attribute_name, $supported_block_attributes [ $this->name ], true ) ) {366 if ( ! in_array( $attribute_name, $supported_block_attributes, true ) ) { 338 367 continue; 339 368 } -
trunk/tests/phpunit/tests/block-bindings/render.php
r59095 r60611 18 18 19 19 /** 20 * Sets up shared fixtures. 21 * 22 * @since 6.9.0 23 */ 24 public static function wpSetUpBeforeClass() { 25 register_block_type( 26 'test/block', 27 array( 28 'attributes' => array( 29 'myAttribute' => array( 30 'type' => 'string', 31 ), 32 ), 33 'render_callback' => function ( $attributes ) { 34 return '<p>' . esc_html( $attributes['myAttribute'] ) . '</p>'; 35 }, 36 ) 37 ); 38 } 39 40 /** 20 41 * Tear down after each test. 21 42 * … … 33 54 34 55 /** 56 * Tear down after class. 57 * 58 * @since 6.9.0 59 */ 60 public static function wpTearDownAfterClass() { 61 unregister_block_type( 'test/block' ); 62 } 63 64 /** 35 65 * Test if the block content is updated with the value returned by the source. 36 66 * … … 65 95 $block->attributes['content'], 66 96 "The 'content' attribute should be updated with the value returned by the source." 97 ); 98 $this->assertSame( 99 '<p>test source value</p>', 100 trim( $result ), 101 'The block content should be updated with the value returned by the source.' 102 ); 103 } 104 105 /** 106 * Test if the block_bindings_supported_attributes_{$block_type} filter is applied correctly. 107 * 108 * @ticket 62090 109 */ 110 public function test_filter_block_bindings_supported_attributes() { 111 $get_value_callback = function () { 112 return 'test source value'; 113 }; 114 115 register_block_bindings_source( 116 self::SOURCE_NAME, 117 array( 118 'label' => self::SOURCE_LABEL, 119 'get_value_callback' => $get_value_callback, 120 ) 121 ); 122 123 add_filter( 124 'block_bindings_supported_attributes_test/block', 125 function ( $supported_attributes ) { 126 $supported_attributes[] = 'myAttribute'; 127 return $supported_attributes; 128 } 129 ); 130 131 $block_content = <<<HTML 132 <!-- wp:test/block {"metadata":{"bindings":{"myAttribute":{"source":"test/source"}}}} --> 133 <p>This should not appear</p> 134 <!-- /wp:test/block --> 135 HTML; 136 $parsed_blocks = parse_blocks( $block_content ); 137 $block = new WP_Block( $parsed_blocks[0] ); 138 $result = $block->render(); 139 140 $this->assertSame( 141 'test source value', 142 $block->attributes['myAttribute'], 143 "The 'myAttribute' attribute should be updated with the value returned by the source." 67 144 ); 68 145 $this->assertSame(
Note: See TracChangeset
for help on using the changeset viewer.