From c0e618a5947c7ff1a1e88d7ab6d9e0749ce31771 Mon Sep 17 00:00:00 2001 From: Glen Davies Date: Wed, 8 Jun 2022 00:39:58 +1200 Subject: [PATCH] Block styles: Account for style block nodes that have no name (#41446) * Account for style block nodes that have no name, eg. block element style settings from theme.json * lint fix Co-authored-by: Glen Davies Co-authored-by: Ben Dwyer --- .../get-global-styles-and-settings.php | 37 +++++++++++++++---- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/lib/compat/wordpress-6.1/get-global-styles-and-settings.php b/lib/compat/wordpress-6.1/get-global-styles-and-settings.php index 64d6a1050791b..dcb15c948316d 100644 --- a/lib/compat/wordpress-6.1/get-global-styles-and-settings.php +++ b/lib/compat/wordpress-6.1/get-global-styles-and-settings.php @@ -9,15 +9,36 @@ * Adds global style rules to the inline style for each block. */ function wp_add_global_styles_for_blocks() { - $tree = WP_Theme_JSON_Resolver_Gutenberg::get_merged_data(); - // TODO some nodes dont have a name... + $tree = WP_Theme_JSON_Resolver_Gutenberg::get_merged_data(); $block_nodes = $tree->get_styles_block_nodes(); foreach ( $block_nodes as $metadata ) { - $block_css = $tree->get_styles_for_block( $metadata ); - $block_name = str_replace( 'core/', '', $metadata['name'] ); - // These block styles are added on block_render. - // This hooks inline CSS to them so that they are loaded conditionally - // based on whether or not the block is used on the page. - wp_add_inline_style( 'wp-block-' . $block_name, $block_css ); + $block_css = $tree->get_styles_for_block( $metadata ); + + if ( isset( $metadata['name'] ) ) { + $block_name = str_replace( 'core/', '', $metadata['name'] ); + // These block styles are added on block_render. + // This hooks inline CSS to them so that they are loaded conditionally + // based on whether or not the block is used on the page. + wp_add_inline_style( 'wp-block-' . $block_name, $block_css ); + } + + // The likes of block element styles from theme.json do not have $metadata['name'] set. + if ( ! isset( $metadata['name'] ) && ! empty( $metadata['path'] ) ) { + $result = array_values( + array_filter( + $metadata['path'], + function ( $item ) { + if ( strpos( $item, 'core/' ) !== false ) { + return true; + } + return false; + } + ) + ); + if ( isset( $result[0] ) ) { + $block_name = str_replace( 'core/', '', $result[0] ); + wp_add_inline_style( 'wp-block-' . $block_name, $block_css ); + } + } } }