From 21b0753837bf7c41e7ce47ae78d1802b8a480b2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B6ren=20Wrede?= Date: Wed, 19 Oct 2022 15:11:45 +0200 Subject: [PATCH 1/2] Add ID Attribute to block wrapper --- src/wp-includes/class-wp-block-supports.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wp-includes/class-wp-block-supports.php b/src/wp-includes/class-wp-block-supports.php index a8e2ecb36bd42..098c731bc1eb5 100644 --- a/src/wp-includes/class-wp-block-supports.php +++ b/src/wp-includes/class-wp-block-supports.php @@ -178,7 +178,7 @@ function get_block_wrapper_attributes( $extra_attributes = array() ) { // This is hardcoded on purpose. // We only support a fixed list of attributes. - $attributes_to_merge = array( 'style', 'class' ); + $attributes_to_merge = array( 'style', 'class', 'id' ); $attributes = array(); foreach ( $attributes_to_merge as $attribute_name ) { if ( empty( $new_attributes[ $attribute_name ] ) && empty( $extra_attributes[ $attribute_name ] ) ) { From 7c565e7e4795731410f520bedf61a56b9568191a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B6ren=20Wrede?= Date: Fri, 3 Feb 2023 11:37:21 +0100 Subject: [PATCH 2/2] Backport Gutenberg #44771 "Add anchor support for dynamic blocks" --- src/wp-includes/block-supports/anchor.php | 73 +++++++++++++++++++++++ src/wp-settings.php | 1 + 2 files changed, 74 insertions(+) create mode 100644 src/wp-includes/block-supports/anchor.php diff --git a/src/wp-includes/block-supports/anchor.php b/src/wp-includes/block-supports/anchor.php new file mode 100644 index 0000000000000..e71cab0adfc10 --- /dev/null +++ b/src/wp-includes/block-supports/anchor.php @@ -0,0 +1,73 @@ +supports, array( 'anchor' ), true ); + if ( ! $has_anchor_support ) { + return; + } + + if ( ! $block_type->attributes ) { + $block_type->attributes = array(); + } + + if ( ! array_key_exists( 'anchor', $block_type->attributes ) ) { + $block_type->attributes['anchor'] = array( + 'type' => 'string', + ); + } +} + +/** + * Add the anchor to the output. + * + * @since 6.2.0 + * @access private + * + * @param WP_Block_Type $block_type Block Type. + * @param array $block_attributes Block attributes. + * @return array Block anchor. + */ +function wp_apply_anchor_support( $block_type, $block_attributes ) { + if ( ! $block_attributes ) { + return array(); + } + + if ( wp_should_skip_block_supports_serialization( $block_type, 'anchor' ) ) { + return array(); + } + + $has_anchor_support = _wp_array_get( $block_type->supports, array( 'anchor' ), true ); + if ( ! $has_anchor_support ) { + return array(); + } + + $has_anchor = array_key_exists( 'anchor', $block_attributes ); + if ( ! $has_anchor ) { + return array(); + } + + return array( 'id' => $block_attributes['anchor'] ); +} + +// Register the block support. +WP_Block_Supports::get_instance()->register( + 'anchor', + array( + 'register_attribute' => 'wp_register_anchor_support', + 'apply' => 'wp_apply_anchor_support', + ) +); diff --git a/src/wp-settings.php b/src/wp-settings.php index d80d79bb82d6b..a134af437dad3 100644 --- a/src/wp-settings.php +++ b/src/wp-settings.php @@ -323,6 +323,7 @@ require ABSPATH . WPINC . '/class-wp-block-supports.php'; require ABSPATH . WPINC . '/block-supports/utils.php'; require ABSPATH . WPINC . '/block-supports/align.php'; +require ABSPATH . WPINC . '/block-supports/anchor.php'; require ABSPATH . WPINC . '/block-supports/border.php'; require ABSPATH . WPINC . '/block-supports/colors.php'; require ABSPATH . WPINC . '/block-supports/custom-classname.php';