Make WordPress Core


Ignore:
Timestamp:
08/06/2025 06:20:22 PM (13 months ago)
Author:
Bernhard Reiter
Message:

Block Bindings: Add filter to set supported block attributes.

Add a new filter, block_bindings_supported_attributes_{$block_type}, that allows customizing which of a block's attributes can be connected to a Block Bindings source.

Props bernhard-reiter, gziolo, maxschmeling.
Closes #62090.

File:
1 edited

Legend:

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

    r60539 r60611  
    9898         */
    9999        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        );
    100116
    101117        /**
     
    279295         */
    280296        private function process_block_bindings() {
     297                $block_type                 = $this->name;
    281298                $parsed_block               = $this->parsed_block;
    282299                $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
    289318                );
    290319
     
    292321                // block types, or the bindings property is not an array, return the block content.
    293322                if (
    294                         ! isset( $supported_block_attributes[ $this->name ] ) ||
     323                        empty( $supported_block_attributes ) ||
    295324                        empty( $parsed_block['attrs']['metadata']['bindings'] ) ||
    296325                        ! is_array( $parsed_block['attrs']['metadata']['bindings'] )
     
    316345                         * resulting array.
    317346                         */
    318                         foreach ( $supported_block_attributes[ $parsed_block['blockName'] ] as $attribute_name ) {
     347                        foreach ( $supported_block_attributes as $attribute_name ) {
    319348                                // Retain any non-pattern override bindings that might be present.
    320349                                $updated_bindings[ $attribute_name ] = isset( $bindings[ $attribute_name ] )
     
    335364                foreach ( $bindings as $attribute_name => $block_binding ) {
    336365                        // 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 ) ) {
    338367                                continue;
    339368                        }
Note: See TracChangeset for help on using the changeset viewer.