Skip to content
Closed
Changes from 1 commit
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
7f1f6a0
Introduce data provider to allow extending test coverage
ockham Aug 13, 2025
054756d
Add test coverage for Button block's text attribute
ockham Aug 13, 2025
b328dee
Block Bindings: Simplify replace_html() method
ockham Aug 13, 2025
21e80e2
Add WP_Block_Bindings_Processor class
ockham Aug 18, 2025
1c70bc3
Use WP_Block_Bindings_Processor for block bindings
ockham Aug 18, 2025
8f76759
Add kses back :/
ockham Aug 18, 2025
b7b7ca5
WPCS
ockham Aug 18, 2025
bb7c906
Remove obsolete var
ockham Aug 18, 2025
103a5c4
Indentation
ockham Aug 18, 2025
3f2e32b
Return true upon success
ockham Aug 18, 2025
85b6354
Add basic PHPDoc
ockham Aug 18, 2025
b67890e
Add more PHPDoc
ockham Aug 19, 2025
6bc4fd5
Add basic test coverage
ockham Aug 19, 2025
d943cd8
Allow setting attributes
ockham Aug 19, 2025
527c5d8
Increase test coverage
ockham Aug 19, 2025
86e836d
Increase test coverage
ockham Aug 20, 2025
dad7380
Add more commentary and warnings
ockham Aug 20, 2025
88af5ff
Do not explose block bindings processor class
sirreal Aug 21, 2025
a56f978
Remove block bindings processor class
sirreal Aug 21, 2025
7c3fc45
wpcs
sirreal Aug 21, 2025
66fef38
Make the hidden class instance static
sirreal Aug 21, 2025
24a0b0d
Use Reflection to make tests work again
ockham Aug 25, 2025
2e7df73
Block Bindings Processor: Tweak test to break with current implementa…
ockham Aug 25, 2025
e2f0a38
Block Bindings Processor: Base implementation on WP_HTML_Text_Replace…
ockham Aug 25, 2025
b045050
Remove now-obsolete build() alias method
ockham Aug 25, 2025
e739c6c
Rename test file
ockham Aug 25, 2025
6a4a3a3
Correct @since PHPDoc
ockham Aug 25, 2025
4dbb0e5
More descriptive variable names
ockham Aug 26, 2025
a18e435
Remove static var
ockham Aug 26, 2025
3410f40
Make sure we're not stopped on atomic/void/self-closing element
ockham Aug 26, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Make the hidden class instance static
  • Loading branch information
sirreal authored and ockham committed Aug 26, 2025
commit 66fef38310d7c3076e9460c937a08079696d6883
77 changes: 40 additions & 37 deletions src/wp-includes/class-wp-block.php
Original file line number Diff line number Diff line change
Expand Up @@ -462,49 +462,52 @@ private function replace_html( string $block_content, string $attribute_name, $s
}

private static function get_block_bindings_processor( string $block_content ) {
$internal_processor_class = new class('', WP_HTML_Processor::CONSTRUCTOR_UNLOCK_CODE) 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 );
}

/**
* Replace the rich text content between a tag opener and matching closer.
*
* When stopped on a tag opener, replace the content enclosed by it and its
* matching closer with the provided rich text.
*
* @param string $rich_text The rich text to replace the original content with.
* @return bool True on success.
*/
public function replace_rich_text( $rich_text ) {
if ( $this->is_tag_closer() ) {
return false;
static $internal_processor_class = null;
if ( null === $internal_processor_class ) {
$internal_processor_class = new class('', WP_HTML_Processor::CONSTRUCTOR_UNLOCK_CODE) 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 );
}

$depth = $this->get_current_depth();
/**
* Replace the rich text content between a tag opener and matching closer.
*
* When stopped on a tag opener, replace the content enclosed by it and its
* matching closer with the provided rich text.
*
* @param string $rich_text The rich text to replace the original content with.
* @return bool True on success.
*/
public function replace_rich_text( $rich_text ) {
if ( $this->is_tag_closer() ) {
return false;
}

$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;
$this->release_bookmark( '_wp_block_bindings_tag_opener' );
$depth = $this->get_current_depth();

// Find matching tag closer.
while ( $this->next_token() && $this->get_current_depth() >= $depth ) {
}
$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;
$this->release_bookmark( '_wp_block_bindings_tag_opener' );

$this->set_bookmark( '_wp_block_bindings_tag_closer' );
$bm = $this->bookmarks['__wp_block_bindings_tag_closer'];
$this->end_of_flushed = $bm->start;
$this->release_bookmark( '_wp_block_bindings_tag_closer' );
// Find matching tag closer.
while ( $this->next_token() && $this->get_current_depth() >= $depth ) {
}

return true;
}
};
$this->set_bookmark( '_wp_block_bindings_tag_closer' );
$bm = $this->bookmarks['__wp_block_bindings_tag_closer'];
$this->end_of_flushed = $bm->start;
$this->release_bookmark( '_wp_block_bindings_tag_closer' );

return true;
}
};
}

return $internal_processor_class::create_fragment( $block_content );
}
Expand Down