diff --git a/src/wp-includes/blocks.php b/src/wp-includes/blocks.php index 206e7d3991..a1bde9a802 100644 --- a/src/wp-includes/blocks.php +++ b/src/wp-includes/blocks.php @@ -647,24 +647,11 @@ function _excerpt_render_inner_columns_blocks( $columns, $allowed_blocks ) { return $output; } -/** - * Block currently being parsed. - * - * @type array -*/ -global $current_parsed_block; - -$current_parsed_block = array( - 'blockName' => null, - 'attributes' => null, -); - /** * Renders a single block into a HTML string. * * @since 5.0.0 * - * @global array $current_parsed_block Block currently being parsed. * @global WP_Post $post The post to edit. * @global WP_Query $wp_query WordPress Query object. * @global WP_Query $wp_query WordPress Query object. @@ -673,7 +660,7 @@ $current_parsed_block = array( * @return string String of rendered HTML. */ function render_block( $parsed_block ) { - global $post, $wp_query, $current_parsed_block; + global $post, $wp_query; /** * Allows render_block() to be short-circuited, by returning a non-null value. @@ -688,8 +675,6 @@ function render_block( $parsed_block ) { return $pre_render; } - $current_parsed_block = $parsed_block; - $source_block = $parsed_block; /** diff --git a/src/wp-includes/class-wp-block-supports.php b/src/wp-includes/class-wp-block-supports.php index 7bec60b85d..27da185a20 100644 --- a/src/wp-includes/class-wp-block-supports.php +++ b/src/wp-includes/class-wp-block-supports.php @@ -23,6 +23,13 @@ class WP_Block_Supports { */ private $block_supports = array(); + /** + * Tracks the current block to be rendered. + * + * @var array + */ + public static $block_to_render = null; + /** * Container for the main instance of the class. * @@ -72,20 +79,18 @@ class WP_Block_Supports { ); } - /** * Generates an array of HTML attributes, such as classes, by applying to * the given block all of the features that the block supports. * * @since 5.6.0 * - * @param array $parsed_block Block as parsed from content. * @return array Array of HTML attributes. */ - public function apply_block_supports( $parsed_block ) { - $block_attributes = $parsed_block['attrs']; + public function apply_block_supports() { + $block_attributes = self::$block_to_render['attrs']; $block_type = WP_Block_Type_Registry::get_instance()->get_registered( - $parsed_block['blockName'] + self::$block_to_render['blockName'] ); // If no render_callback, assume styles have been previously handled. @@ -155,15 +160,12 @@ class WP_Block_Supports { * * @since 5.6.0 * - * @global array $current_parsed_block Block currently being parsed. - * * @param array $extra_attributes Optional. Extra attributes to render on the block wrapper. * * @return string String of HTML classes. */ function get_block_wrapper_attributes( $extra_attributes = array() ) { - global $current_parsed_block; - $new_attributes = WP_Block_Supports::get_instance()->apply_block_supports( $current_parsed_block ); + $new_attributes = WP_Block_Supports::get_instance()->apply_block_supports(); if ( empty( $new_attributes ) && empty( $extra_attributes ) ) { return ''; @@ -208,4 +210,3 @@ function get_block_wrapper_attributes( $extra_attributes = array() ) { return implode( ' ', $normalized_attributes ); } - diff --git a/src/wp-includes/class-wp-block.php b/src/wp-includes/class-wp-block.php index 135bad0d33..e2630a451a 100644 --- a/src/wp-includes/class-wp-block.php +++ b/src/wp-includes/class-wp-block.php @@ -192,7 +192,7 @@ class WP_Block { * @return string Rendered block output. */ public function render( $options = array() ) { - global $post, $current_parsed_block; + global $post; $options = wp_parse_args( $options, array( @@ -206,20 +206,18 @@ class WP_Block { if ( ! $options['dynamic'] || empty( $this->block_type->skip_inner_blocks ) ) { $index = 0; foreach ( $this->inner_content as $chunk ) { - if ( is_string( $chunk ) ) { - $block_content .= $chunk; - } else { - $parent_parsed_block = $current_parsed_block; - $current_parsed_block = $this->inner_blocks[ $index ]->parsed_block; - $block_content .= $this->inner_blocks[ $index++ ]->render(); - $current_parsed_block = $parent_parsed_block; - } + $block_content .= is_string( $chunk ) ? + $chunk : + $this->inner_blocks[ $index++ ]->render(); } } if ( $is_dynamic ) { $global_post = $post; + $parent = WP_Block_Supports::$block_to_render; + WP_Block_Supports::$block_to_render = $this->parsed_block; $block_content = (string) call_user_func( $this->block_type->render_callback, $this->attributes, $block_content, $this ); + WP_Block_Supports::$block_to_render = $parent; $post = $global_post; } diff --git a/tests/phpunit/includes/testcase-block-supports.php b/tests/phpunit/includes/testcase-block-supports.php index b5ed1310bc..9f379696e3 100644 --- a/tests/phpunit/includes/testcase-block-supports.php +++ b/tests/phpunit/includes/testcase-block-supports.php @@ -96,11 +96,13 @@ class Block_Supported_Styles_Test extends WP_UnitTestCase { * Returns the rendered output for the current block. * * @param array $block Block to render. + * + * @return string Rendered output for the current block. */ private function render_example_block( $block ) { - global $current_parsed_block; - $current_parsed_block = $block; - $wrapper_attributes = get_block_wrapper_attributes( + WP_Block_Supports::init(); + WP_Block_Supports::$block_to_render = $block; + $wrapper_attributes = get_block_wrapper_attributes( array( 'class' => 'foo-bar-class', 'style' => 'test: style;',