Make WordPress Core


Ignore:
Timestamp:
08/06/2025 06:20:22 PM (11 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.