Changeset 56254
- Timestamp:
- 07/18/2023 12:00:49 AM (20 months ago)
- Location:
- trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/wp-includes/global-styles-and-settings.php
r56249 r56254 321 321 // The likes of block element styles from theme.json do not have $metadata['name'] set. 322 322 if ( ! isset( $metadata['name'] ) && ! empty( $metadata['path'] ) ) { 323 $result = array_values( 324 array_filter( 325 $metadata['path'], 326 static function ( $item ) { 327 if ( str_contains( $item, 'core/' ) ) { 328 return true; 329 } 330 return false; 331 } 332 ) 333 ); 334 if ( isset( $result[0] ) ) { 335 if ( str_starts_with( $result[0], 'core/' ) ) { 336 $block_name = str_replace( 'core/', '', $result[0] ); 323 $block_name = wp_get_block_name_from_theme_json_path( $metadata['path'] ); 324 if ( $block_name ) { 325 if ( str_starts_with( $block_name, 'core/' ) ) { 326 $block_name = str_replace( 'core/', '', $block_name ); 337 327 $stylesheet_handle = 'wp-block-' . $block_name; 338 328 } … … 341 331 } 342 332 } 333 } 334 335 /** 336 * Gets the block name from a given theme.json path. 337 * 338 * @since 6.3.0 339 * @access private 340 * 341 * @param array $path An array of keys describing the path to a property in theme.json. 342 * @return string Identified block name, or empty string if none found. 343 */ 344 function wp_get_block_name_from_theme_json_path( $path ) { 345 // Block name is expected to be the third item after 'styles' and 'blocks'. 346 if ( 347 count( $path ) >= 3 348 && 'styles' === $path[0] 349 && 'blocks' === $path[1] 350 && str_contains( $path[2], '/' ) 351 ) { 352 return $path[2]; 353 } 354 355 /* 356 * As fallback and for backward compatibility, allow any core block to be 357 * at any position. 358 */ 359 $result = array_values( 360 array_filter( 361 $path, 362 static function ( $item ) { 363 if ( str_contains( $item, 'core/' ) ) { 364 return true; 365 } 366 return false; 367 } 368 ) 369 ); 370 if ( isset( $result[0] ) ) { 371 return $result[0]; 372 } 373 return ''; 343 374 } 344 375 -
trunk/tests/phpunit/data/themedir1/block-theme/theme.json
r55231 r56254 74 74 "color": { 75 75 "background": "hotpink" 76 }, 77 "elements": { 78 "cite": { 79 "color": { 80 "text": "white" 81 } 82 } 76 83 } 77 84 } -
trunk/tests/phpunit/tests/theme/wpAddGlobalStylesForBlocks.php
r54703 r56254 140 140 } 141 141 142 /** 143 * @ticket 57868 144 */ 145 public function test_third_party_blocks_inline_styles_for_elements_get_rendered_when_per_block() { 146 $this->set_up_third_party_block(); 147 add_filter( 'should_load_separate_core_block_assets', '__return_true' ); 148 149 wp_register_style( 'global-styles', false, array(), true, true ); 150 wp_enqueue_style( 'global-styles' ); 151 wp_add_global_styles_for_blocks(); 152 153 $actual = get_echo( 'wp_print_styles' ); 154 155 $this->assertStringContainsString( 156 '.wp-block-my-third-party-block cite{color: white;}', 157 $actual 158 ); 159 } 160 161 /** 162 * @ticket 57868 163 */ 164 public function test_third_party_blocks_inline_styles_for_elements_get_rendered() { 165 wp_register_style( 'global-styles', false, array(), true, true ); 166 wp_enqueue_style( 'global-styles' ); 167 wp_add_global_styles_for_blocks(); 168 169 $actual = get_echo( 'wp_print_styles' ); 170 171 $this->assertStringContainsString( 172 '.wp-block-my-third-party-block cite{color: white;}', 173 $actual 174 ); 175 } 176 177 /** 178 * @ticket 57868 179 * 180 * @dataProvider data_wp_get_block_name_from_theme_json_path 181 * 182 * @param array $path An array of keys describing the path to a property in theme.json. 183 * @param string $expected The expected block name. 184 */ 185 public function test_wp_get_block_name_from_theme_json_path( $path, $expected ) { 186 $block_name = wp_get_block_name_from_theme_json_path( $path ); 187 $this->assertSame( $expected, $block_name ); 188 } 189 190 /** 191 * Data provider. 192 * 193 * @return array[] 194 */ 195 public function data_wp_get_block_name_from_theme_json_path() { 196 return array( 197 'core block styles' => array( 198 array( 'styles', 'blocks', 'core/navigation' ), 199 'core/navigation', 200 ), 201 'core block element styles' => array( 202 array( 'styles', 'blocks', 'core/navigation', 'elements', 'link' ), 203 'core/navigation', 204 ), 205 'custom block styles' => array( 206 array( 'styles', 'blocks', 'my/third-party-block' ), 207 'my/third-party-block', 208 ), 209 'custom block element styles' => array( 210 array( 'styles', 'blocks', 'my/third-party-block', 'elements', 'cite' ), 211 'my/third-party-block', 212 ), 213 'custom block wrong format' => array( 214 array( 'styles', 'my/third-party-block' ), 215 '', 216 ), 217 'invalid path but works for BC' => array( 218 array( 'something', 'core/image' ), 219 'core/image', 220 ), 221 ); 222 } 223 142 224 private function set_up_third_party_block() { 143 225 switch_theme( 'block-theme' );
Note: See TracChangeset
for help on using the changeset viewer.