diff --git a/src/wp-includes/block-supports/elements.php b/src/wp-includes/block-supports/elements.php index 770e3e95c3..4f3de8c5b8 100644 --- a/src/wp-includes/block-supports/elements.php +++ b/src/wp-includes/block-supports/elements.php @@ -36,6 +36,9 @@ function wp_render_elements_support( $block_content, $block ) { } $block_type = WP_Block_Type_Registry::get_instance()->get_registered( $block['blockName'] ); + if ( ! $block_type ) { + return $block_content; + } $element_color_properties = array( 'button' => array( diff --git a/tests/phpunit/tests/block-supports/wpRenderElementsSupport.php b/tests/phpunit/tests/block-supports/wpRenderElementsSupport.php index a65f53b471..db5307d207 100644 --- a/tests/phpunit/tests/block-supports/wpRenderElementsSupport.php +++ b/tests/phpunit/tests/block-supports/wpRenderElementsSupport.php @@ -18,6 +18,39 @@ class Tests_Block_Supports_WpRenderElementsSupport extends WP_UnitTestCase { parent::tear_down(); } + /** + * Tests that block supports leaves block content alone if the block type + * isn't registered. + * + * @ticket 59578 + * + * @covers ::wp_render_elements_support + * + * @return void + */ + public function test_leaves_block_content_alone_when_block_type_not_registered() { + $block = array( + 'blockName' => 'test/element-block-supports', + 'attrs' => array( + 'style' => array( + 'elements' => array( + 'button' => array( + 'color' => array( + 'text' => 'var:preset|color|vivid-red', + 'background' => '#fff', + ), + ), + ), + ), + ), + ); + + $block_markup = '
Hello WordPress!
'; + $actual = wp_render_elements_support( $block_markup, $block ); + + $this->assertSame( $block_markup, $actual, 'Expected to leave block content unmodified, but found changes.' ); + } + /** * Tests that elements block support applies the correct classname. * @@ -64,7 +97,7 @@ class Tests_Block_Supports_WpRenderElementsSupport extends WP_UnitTestCase { $this->assertMatchesRegularExpression( $expected_markup, $actual, - 'Position block wrapper markup should be correct' + 'Block wrapper markup should be correct' ); } @@ -80,6 +113,34 @@ class Tests_Block_Supports_WpRenderElementsSupport extends WP_UnitTestCase { ); return array( + // @ticket 59578 + 'empty block markup remains untouched' => array( + 'color_settings' => array( + 'button' => true, + ), + 'elements_styles' => array( + 'button' => array( 'color' => $color_styles ), + ), + 'block_markup' => '', + 'expected_markup' => '/^$/', + ), + 'empty block markup remains untouched when no block attributes' => array( + 'color_settings' => array( + 'button' => true, + ), + 'elements_styles' => null, + 'block_markup' => '', + 'expected_markup' => '/^$/', + ), + 'block markup remains untouched when block has no attributes' => array( + 'color_settings' => array( + 'button' => true, + ), + 'elements_styles' => null, + 'block_markup' => 'Hello WordPress!
', + 'expected_markup' => '/^