From 3f2b674b36b1fdd085bd8dca55e24ae73aadff87 Mon Sep 17 00:00:00 2001 From: Bernhard Reiter Date: Wed, 26 Jun 2024 08:54:13 +0000 Subject: [PATCH] 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. Built from https://develop.svn.wordpress.org/trunk@58578 git-svn-id: http://core.svn.wordpress.org/trunk@58025 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-includes/blocks.php | 11 +++++++++-- wp-includes/version.php | 2 +- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/wp-includes/blocks.php b/wp-includes/blocks.php index 26e5e0c96b..2edcaa8c1b 100644 --- a/wp-includes/blocks.php +++ b/wp-includes/blocks.php @@ -1095,7 +1095,10 @@ function update_ignored_hooked_blocks_postmeta( $post ) { $post->post_content ); - $serialized_block = apply_block_hooks_to_content( $markup, get_post( $post->ID ), 'set_ignored_hooked_blocks_metadata' ); + $existing_post = get_post( $post->ID ); + // Merge the existing post object with the updated post object to pass to the block hooks algorithm for context. + $context = (object) array_merge( (array) $existing_post, (array) $post ); + $serialized_block = apply_block_hooks_to_content( $markup, $context, 'set_ignored_hooked_blocks_metadata' ); $root_block = parse_blocks( $serialized_block )[0]; $ignored_hooked_blocks = isset( $root_block['attrs']['metadata']['ignoredHookedBlocks'] ) @@ -1108,7 +1111,11 @@ function update_ignored_hooked_blocks_postmeta( $post ) { $existing_ignored_hooked_blocks = json_decode( $existing_ignored_hooked_blocks, true ); $ignored_hooked_blocks = array_unique( array_merge( $ignored_hooked_blocks, $existing_ignored_hooked_blocks ) ); } - update_post_meta( $post->ID, '_wp_ignored_hooked_blocks', json_encode( $ignored_hooked_blocks ) ); + + if ( ! isset( $post->meta_input ) ) { + $post->meta_input = array(); + } + $post->meta_input['_wp_ignored_hooked_blocks'] = json_encode( $ignored_hooked_blocks ); } $post->post_content = remove_serialized_parent_block( $serialized_block ); diff --git a/wp-includes/version.php b/wp-includes/version.php index daf05cc14e..fdd8a99e2f 100644 --- a/wp-includes/version.php +++ b/wp-includes/version.php @@ -16,7 +16,7 @@ * * @global string $wp_version */ -$wp_version = '6.7-alpha-58577'; +$wp_version = '6.7-alpha-58578'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.