From c6acfadd71eb97e57fbe6a390bb98a96989278b4 Mon Sep 17 00:00:00 2001 From: Bernie Reiter Date: Wed, 20 Aug 2025 15:10:19 +0200 Subject: [PATCH 1/2] Block Bindings Processor: Tweak test to break with current implementation --- .../phpunit/tests/block-bindings/wpBlockBindingsProcessor.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/phpunit/tests/block-bindings/wpBlockBindingsProcessor.php b/tests/phpunit/tests/block-bindings/wpBlockBindingsProcessor.php index 5a8cf11095847..d7f20099c000e 100644 --- a/tests/phpunit/tests/block-bindings/wpBlockBindingsProcessor.php +++ b/tests/phpunit/tests/block-bindings/wpBlockBindingsProcessor.php @@ -79,10 +79,11 @@ public function test_replace_rich_text_and_seek() { $this->assertTrue( $processor->replace_rich_text( 'New image caption' ) ); $processor->seek( 'image' ); + $processor->add_class( 'extra-img-class' ); $this->assertEquals( $figure_opener . - $img . + '' . '
New image caption
' . $figure_closer, $processor->build() From 1a61046ed49aef907df42af6ebf06d30e745932a Mon Sep 17 00:00:00 2001 From: Bernie Reiter Date: Wed, 20 Aug 2025 15:11:23 +0200 Subject: [PATCH 2/2] Block Bindings Processor: Base implementation on WP_HTML_Text_Replacement to fix broken test --- .../class-wp-block-bindings-processor.php | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/wp-includes/class-wp-block-bindings-processor.php b/src/wp-includes/class-wp-block-bindings-processor.php index f833b9ed07562..4bf904d1d7bc9 100644 --- a/src/wp-includes/class-wp-block-bindings-processor.php +++ b/src/wp-includes/class-wp-block-bindings-processor.php @@ -26,11 +26,9 @@ * @since 6.9.0 */ class WP_Block_Bindings_Processor extends WP_HTML_Processor { - private $output = ''; - private $end_of_flushed = 0; public function build() { - return $this->output . substr( $this->get_updated_html(), $this->end_of_flushed ); + return $this->get_updated_html(); } /** @@ -51,9 +49,8 @@ public function replace_rich_text( $rich_text ) { $this->set_bookmark( '_wp_block_bindings_tag_opener' ); // The bookmark names are prefixed with `_` so the key below has an extra `_`. - $bm = $this->bookmarks['__wp_block_bindings_tag_opener']; - $this->output .= substr( $this->get_updated_html(), $this->end_of_flushed, $bm->start + $bm->length ); - $this->output .= $rich_text; + $bm = $this->bookmarks['__wp_block_bindings_tag_opener']; + $start = $bm->start + $bm->length; $this->release_bookmark( '_wp_block_bindings_tag_opener' ); // Find matching tag closer. @@ -61,10 +58,16 @@ public function replace_rich_text( $rich_text ) { } $this->set_bookmark( '_wp_block_bindings_tag_closer' ); - $bm = $this->bookmarks['__wp_block_bindings_tag_closer']; - $this->end_of_flushed = $bm->start; + $bm = $this->bookmarks['__wp_block_bindings_tag_closer']; + $end = $bm->start; $this->release_bookmark( '_wp_block_bindings_tag_closer' ); + $this->lexical_updates[] = new WP_HTML_Text_Replacement( + $start, + $end - $start, + $rich_text + ); + return true; } }