Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix WP_Block_Supports class compatibility with Gutenberg-provided class #640

Closed
wants to merge 14 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 1 addition & 16 deletions src/wp-includes/blocks.php
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -673,7 +660,7 @@ function _excerpt_render_inner_columns_blocks( $columns, $allowed_blocks ) {
* @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.
Expand All @@ -688,8 +675,6 @@ function render_block( $parsed_block ) {
return $pre_render;
}

$current_parsed_block = $parsed_block;

$source_block = $parsed_block;

/**
Expand Down
21 changes: 11 additions & 10 deletions src/wp-includes/class-wp-block-supports.php
Original file line number Diff line number Diff line change
Expand Up @@ -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.
*
Expand Down Expand Up @@ -72,20 +79,18 @@ public function register( $block_support_name, $block_support_config ) {
);
}


/**
* 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.
Expand Down Expand Up @@ -155,15 +160,12 @@ private function register_attributes() {
*
* @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 '';
Expand Down Expand Up @@ -208,4 +210,3 @@ function get_block_wrapper_attributes( $extra_attributes = array() ) {

return implode( ' ', $normalized_attributes );
}

16 changes: 7 additions & 9 deletions src/wp-includes/class-wp-block.php
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@ public function __get( $name ) {
* @return string Rendered block output.
*/
public function render( $options = array() ) {
global $post, $current_parsed_block;
global $post;
$options = wp_parse_args(
$options,
array(
Expand All @@ -206,20 +206,18 @@ public function render( $options = array() ) {
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();
}
}

oandregal marked this conversation as resolved.
Show resolved Hide resolved
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;
}

Expand Down
8 changes: 5 additions & 3 deletions tests/phpunit/includes/testcase-block-supports.php
Original file line number Diff line number Diff line change
Expand Up @@ -96,11 +96,13 @@ private function get_content_from_block( $block ) {
* 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;',
Expand Down