From a9bb470f8b20fb10848666942ac55b796cf6f9bc Mon Sep 17 00:00:00 2001 From: Bernie Reiter Date: Tue, 10 Oct 2023 13:19:42 +0000 Subject: [PATCH] Patterns: Inject `theme` attribute into Template Part blocks. [56805] introduced a regression: The `theme` attribute was no longer injected into Template Part blocks inside of patterns. This caused errors on the frontend, where instead of a given template part, an error message such as `Template part has been deleted or is unavailable: header` was seen. This changeset rectifies that problem, and adds unit test coverage to guard against future regressions. Follow-up to [56805]. Props scruffian, gziolo. Fixes #59583. git-svn-id: https://develop.svn.wordpress.org/trunk@56818 602fd350-edb4-49c9-b593-d223f7449a82 --- .../class-wp-block-patterns-registry.php | 7 ++- .../tests/blocks/wpBlockPatternsRegistry.php | 46 +++++++++++++++++++ 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/src/wp-includes/class-wp-block-patterns-registry.php b/src/wp-includes/class-wp-block-patterns-registry.php index d1ef2ad422..e516277e42 100644 --- a/src/wp-includes/class-wp-block-patterns-registry.php +++ b/src/wp-includes/class-wp-block-patterns-registry.php @@ -164,12 +164,15 @@ final class WP_Block_Patterns_Registry { */ private function prepare_content( $pattern, $hooked_blocks ) { $content = $pattern['content']; + + $before_block_visitor = '_inject_theme_attribute_in_template_part_block'; + $after_block_visitor = null; if ( ! empty( $hooked_blocks ) || has_filter( 'hooked_block_types' ) ) { - $blocks = parse_blocks( $content ); $before_block_visitor = make_before_block_visitor( $hooked_blocks, $pattern ); $after_block_visitor = make_after_block_visitor( $hooked_blocks, $pattern ); - $content = traverse_and_serialize_blocks( $blocks, $before_block_visitor, $after_block_visitor ); } + $blocks = parse_blocks( $content ); + $content = traverse_and_serialize_blocks( $blocks, $before_block_visitor, $after_block_visitor ); return $content; } diff --git a/tests/phpunit/tests/blocks/wpBlockPatternsRegistry.php b/tests/phpunit/tests/blocks/wpBlockPatternsRegistry.php index 8eb4fce78b..61298d1b16 100644 --- a/tests/phpunit/tests/blocks/wpBlockPatternsRegistry.php +++ b/tests/phpunit/tests/blocks/wpBlockPatternsRegistry.php @@ -316,6 +316,29 @@ class Tests_Blocks_wpBlockPattersRegistry extends WP_UnitTestCase { $this->assertSame( $pattern_two, $pattern ); } + /** + * Should insert a theme attribute into Template Part blocks in registered patterns. + * + * @ticket 59583 + * + * @covers WP_Block_Patterns_Registry::register + * @covers WP_Block_Patterns_Registry::get_all_registered + */ + public function test_get_all_registered_includes_theme_attribute() { + $test_pattern = array( + 'title' => 'Test Pattern', + 'content' => '', + ); + $this->registry->register( 'test/pattern', $test_pattern ); + + $expected = sprintf( + '', + get_stylesheet() + ); + $patterns = $this->registry->get_all_registered(); + $this->assertSame( $expected, $patterns[0]['content'] ); + } + /** * Should insert hooked blocks into registered patterns. * @@ -368,6 +391,29 @@ class Tests_Blocks_wpBlockPattersRegistry extends WP_UnitTestCase { $this->assertSame( $expected, $registered ); } + /** + * Should insert a theme attribute into Template Part blocks in registered patterns. + * + * @ticket 59583 + * + * @covers WP_Block_Patterns_Registry::register + * @covers WP_Block_Patterns_Registry::get_registered + */ + public function test_get_registered_includes_theme_attribute() { + $test_pattern = array( + 'title' => 'Test Pattern', + 'content' => '', + ); + $this->registry->register( 'test/pattern', $test_pattern ); + + $expected = sprintf( + '', + get_stylesheet() + ); + $pattern = $this->registry->get_registered( 'test/pattern' ); + $this->assertSame( $expected, $pattern['content'] ); + } + /** * Should insert hooked blocks into registered patterns. *