Blocks: Change traverse_and_serialize_block(s)'s callback signature.

During work on #59399, it was discovered that ''sibling'' block insertion wasn't likely going to work the way it was planned, which required devising an alternative solution. This new solution requires some changes to `traverse_and_serialize_block(s)`:

- Change the signature of the existing callback such that:
  - the return value is a string that will be prepended to the result of the inner block traversal and serialization;
  - the function arguments are: a ''reference'' to the current block (so it can be modified inline, which is important e.g. for `theme` attribute insertion), the parent block, and the previous block (instead of the block index and chunk index).
- Add a second callback argument to `traverse_and_serialize_block(s)`, which is called ''after'' the block is traversed and serialized.
  - Its function arguments are a reference to the current block, the parent block, and the next block.

Props gziolo.
Fixes #59412. See #59313.

git-svn-id: https://develop.svn.wordpress.org/trunk@56644 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Bernie Reiter
2023-09-21 08:32:52 +00:00
parent 8fec1ec36e
commit aa033cba5c
4 changed files with 110 additions and 51 deletions

View File

@@ -58,6 +58,7 @@ class Tests_Blocks_Serialize extends WP_UnitTestCase {
/**
* @ticket 59327
* @ticket 59412
*
* @covers ::traverse_and_serialize_blocks
*/
@@ -73,15 +74,15 @@ class Tests_Blocks_Serialize extends WP_UnitTestCase {
);
}
public static function add_attribute_to_inner_block( $block ) {
public static function add_attribute_to_inner_block( &$block ) {
if ( 'core/inner' === $block['blockName'] ) {
$block['attrs']['myattr'] = 'myvalue';
}
return $block;
}
/**
* @ticket 59327
* @ticket 59412
*
* @covers ::traverse_and_serialize_blocks
*
@@ -92,12 +93,7 @@ class Tests_Blocks_Serialize extends WP_UnitTestCase {
public function test_traverse_and_serialize_identity_from_parsed( $original ) {
$blocks = parse_blocks( $original );
$actual = traverse_and_serialize_blocks(
$blocks,
function ( $block ) {
return $block;
}
);
$actual = traverse_and_serialize_blocks( $blocks );
$this->assertSame( $original, $actual );
}