From 24809a6346716ef890e0f450501d74703a820fd3 Mon Sep 17 00:00:00 2001 From: David Baumwald Date: Tue, 4 Oct 2022 15:48:31 +0000 Subject: [PATCH] Editor: Invalidate blocks metadata cache when needed in `WP_Theme_JSON::get_blocks_metadata()`. This change ensures that user-supplied global styles settings for blocks aren't lost due to sanitization. This could previously occur due to outdated blocks metadata that did not include all registered blocks. Props jorgefilipecosta, andrewserong, oandregal, talldanwp, cbravobernal, bernhard-reiter, hellofromTonya. Fixes #56644. git-svn-id: https://develop.svn.wordpress.org/trunk@54385 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/class-wp-theme-json.php | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/wp-includes/class-wp-theme-json.php b/src/wp-includes/class-wp-theme-json.php index ae214b361a..1774c5ef6f 100644 --- a/src/wp-includes/class-wp-theme-json.php +++ b/src/wp-includes/class-wp-theme-json.php @@ -33,9 +33,10 @@ class WP_Theme_JSON { * process it twice. * * @since 5.8.0 + * @since 6.1.0 Initialize as an empty array. * @var array */ - protected static $blocks_metadata = null; + protected static $blocks_metadata = array(); /** * The CSS selector for the top-level styles. @@ -721,14 +722,15 @@ class WP_Theme_JSON { * @return array Block metadata. */ protected static function get_blocks_metadata() { - if ( null !== static::$blocks_metadata ) { + $registry = WP_Block_Type_Registry::get_instance(); + $blocks = $registry->get_all_registered(); + + // Is there metadata for all currently registered blocks? + $blocks = array_diff_key( $blocks, static::$blocks_metadata ); + if ( empty( $blocks ) ) { return static::$blocks_metadata; } - static::$blocks_metadata = array(); - - $registry = WP_Block_Type_Registry::get_instance(); - $blocks = $registry->get_all_registered(); foreach ( $blocks as $block_name => $block_type ) { if ( isset( $block_type->supports['__experimentalSelector'] ) &&