Changeset 56578
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/wp-includes/block-template-utils.php
r56414 r56578 515 515 516 516 /** 517 * Injects the active theme's stylesheet as a `theme` attribute 518 * into a given template part block. 519 * 520 * @since 6.4.0 521 * @access private 522 * 523 * @param array $block a parsed block. 524 * @return array Updated block. 525 */ 526 function _inject_theme_attribute_in_template_part_block( $block ) { 527 if ( 528 'core/template-part' === $block['blockName'] && 529 ! isset( $block['attrs']['theme'] ) 530 ) { 531 $block['attrs']['theme'] = get_stylesheet(); 532 } 533 return $block; 534 } 535 536 /** 517 537 * Parses a block template and removes the theme attribute from each template part. 518 538 * … … 566 586 $template->id = $theme . '//' . $template_file['slug']; 567 587 $template->theme = $theme; 568 $template->content = _inject_theme_attribute_in_block_template_content( $template_content );569 588 $template->slug = $template_file['slug']; 570 589 $template->source = 'theme'; … … 589 608 $template->area = $template_file['area']; 590 609 } 610 611 $blocks = parse_blocks( $template_content ); 612 $template->content = serialize_blocks( $blocks, '_inject_theme_attribute_in_template_part_block' ); 591 613 592 614 return $template; -
trunk/tests/phpunit/data/templates/template-with-template-part-with-existing-theme-attribute.html
r56562 r56578 1 <!-- wp:template-part {"slug":"header","theme":"fake-theme","align":"full", 1 <!-- wp:template-part {"slug":"header","theme":"fake-theme","align":"full","tagName":"header","className":"site-header"} /--> -
trunk/tests/phpunit/tests/block-template-utils.php
r56562 r56578 209 209 'a template with a template part block with an existing theme attribute' => array( 210 210 'filename' => 'template-with-template-part-with-existing-theme-attribute.html', 211 'expected' => '<!-- wp:template-part {"slug":"header","theme":"fake-theme","align":"full", 211 'expected' => '<!-- wp:template-part {"slug":"header","theme":"fake-theme","align":"full","tagName":"header","className":"site-header"} /-->', 212 212 ), 213 213 'a template with no template part block' => array( … … 217 217 <!-- /wp:paragraph -->', 218 218 ), 219 ); 220 } 221 222 /** 223 * @ticket 59338 224 * 225 * @covers ::test_inject_theme_attribute_in_template_part_block 226 */ 227 public function test_inject_theme_attribute_in_template_part_block() { 228 $template_part_block_without_theme_attribute = array( 229 'blockName' => 'core/template-part', 230 'attrs' => array( 231 'slug' => 'header', 232 'align' => 'full', 233 'tagName' => 'header', 234 'className' => 'site-header', 235 ), 236 'innerHTML' => '', 237 'innerContent' => array(), 238 'innerBlocks' => array(), 239 ); 240 241 $actual = _inject_theme_attribute_in_template_part_block( $template_part_block_without_theme_attribute ); 242 $expected = array( 243 'blockName' => 'core/template-part', 244 'attrs' => array( 245 'slug' => 'header', 246 'align' => 'full', 247 'tagName' => 'header', 248 'className' => 'site-header', 249 'theme' => get_stylesheet(), 250 ), 251 'innerHTML' => '', 252 'innerContent' => array(), 253 'innerBlocks' => array(), 254 ); 255 $this->assertSame( 256 $expected, 257 $actual, 258 '`theme` attribute was not correctly injected in template part block.' 259 ); 260 261 // Does not inject theme when there is an existing theme attribute. 262 $template_part_block_with_existing_theme_attribute = array( 263 'blockName' => 'core/template-part', 264 'attrs' => array( 265 'slug' => 'header', 266 'align' => 'full', 267 'tagName' => 'header', 268 'className' => 'site-header', 269 'theme' => 'fake-theme', 270 ), 271 'innerHTML' => '', 272 'innerContent' => array(), 273 'innerBlocks' => array(), 274 ); 275 276 $actual = _inject_theme_attribute_in_template_part_block( $template_part_block_with_existing_theme_attribute ); 277 $this->assertSame( 278 $template_part_block_with_existing_theme_attribute, 279 $actual, 280 'Existing `theme` attribute in template part block was not respected by attribute injection.' 281 ); 282 283 // Does not inject theme when there is no template part. 284 $non_template_part_block = array( 285 'blockName' => 'core/post-content', 286 'attrs' => array(), 287 'innerHTML' => '', 288 'innerContent' => array(), 289 'innerBlocks' => array(), 290 ); 291 292 $actual = _inject_theme_attribute_in_template_part_block( $non_template_part_block ); 293 $this->assertSame( 294 $non_template_part_block, 295 $actual, 296 '`theme` attribute injection modified non-template-part block.' 219 297 ); 220 298 }
Note: See TracChangeset
for help on using the changeset viewer.