Skip to content

Commit df256e4

Browse files
committed
Block Hooks: Refactor controller filter to use meta_input.
Prior to this changeset, the function `update_ignored_hooked_blocks_postmeta()` used the core function `update_post_meta()` to write `_wp_ignored_hooked_blocks` data to the database during an operation that is preparing a post to be inserted. Since we have access to the incoming changes that are being prepared we can remove this database operation in favour of writing the data to the post object provided under `meta_input`. Doing this means two things: 1. It allows us to store postmeta for new posts that are about to be created since they don't have an `ID` yet (which is information `update_post_meta()` needs). 2. The core controller will take care of updating postmeta in a more predictable pattern. Props tomjcafferkey, bernhard-reiter. Fixes #61495. git-svn-id: https://develop.svn.wordpress.org/trunk@58578 602fd350-edb4-49c9-b593-d223f7449a82
1 parent 6027cea commit df256e4

File tree

2 files changed

+10
-3
lines changed

2 files changed

+10
-3
lines changed

src/wp-includes/blocks.php

+9-2
Original file line numberDiff line numberDiff line change
@@ -1095,7 +1095,10 @@ function update_ignored_hooked_blocks_postmeta( $post ) {
10951095
$post->post_content
10961096
);
10971097

1098-
$serialized_block = apply_block_hooks_to_content( $markup, get_post( $post->ID ), 'set_ignored_hooked_blocks_metadata' );
1098+
$existing_post = get_post( $post->ID );
1099+
// Merge the existing post object with the updated post object to pass to the block hooks algorithm for context.
1100+
$context = (object) array_merge( (array) $existing_post, (array) $post );
1101+
$serialized_block = apply_block_hooks_to_content( $markup, $context, 'set_ignored_hooked_blocks_metadata' );
10991102
$root_block = parse_blocks( $serialized_block )[0];
11001103

11011104
$ignored_hooked_blocks = isset( $root_block['attrs']['metadata']['ignoredHookedBlocks'] )
@@ -1108,7 +1111,11 @@ function update_ignored_hooked_blocks_postmeta( $post ) {
11081111
$existing_ignored_hooked_blocks = json_decode( $existing_ignored_hooked_blocks, true );
11091112
$ignored_hooked_blocks = array_unique( array_merge( $ignored_hooked_blocks, $existing_ignored_hooked_blocks ) );
11101113
}
1111-
update_post_meta( $post->ID, '_wp_ignored_hooked_blocks', json_encode( $ignored_hooked_blocks ) );
1114+
1115+
if ( ! isset( $post->meta_input ) ) {
1116+
$post->meta_input = array();
1117+
}
1118+
$post->meta_input['_wp_ignored_hooked_blocks'] = json_encode( $ignored_hooked_blocks );
11121119
}
11131120

11141121
$post->post_content = remove_serialized_parent_block( $serialized_block );

tests/phpunit/tests/blocks/updateIgnoredHookedBlocksPostMeta.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ public function test_update_ignored_hooked_blocks_postmeta_preserves_entities()
7575
);
7676
$this->assertSame(
7777
array( 'tests/my-block' ),
78-
json_decode( get_post_meta( self::$navigation_post->ID, '_wp_ignored_hooked_blocks', true ), true ),
78+
json_decode( $post->meta_input['_wp_ignored_hooked_blocks'], true ),
7979
'Block was not added to ignored hooked blocks metadata.'
8080
);
8181
}

0 commit comments

Comments
 (0)