diff --git a/src/wp-includes/blocks.php b/src/wp-includes/blocks.php index 4d3a34e34f..6fc72e358a 100644 --- a/src/wp-includes/blocks.php +++ b/src/wp-includes/blocks.php @@ -150,8 +150,8 @@ function register_block_script_handle( $metadata, $field_name, $index = 0 ) { * Determine if the block script was registered in a theme, by checking if the script path starts with either * the parent (template) or child (stylesheet) directory path. */ - $is_parent_theme_block = str_starts_with( $script_path_norm, $template_path_norm ); - $is_child_theme_block = str_starts_with( $script_path_norm, $stylesheet_path_norm ); + $is_parent_theme_block = str_starts_with( $script_path_norm, trailingslashit( $template_path_norm ) ); + $is_child_theme_block = str_starts_with( $script_path_norm, trailingslashit( $stylesheet_path_norm ) ); $is_theme_block = ( $is_parent_theme_block || $is_child_theme_block ); $script_uri = ''; @@ -270,8 +270,8 @@ function register_block_style_handle( $metadata, $field_name, $index = 0 ) { // Determine if the block style was registered in a theme, by checking if the script path starts with either // the parent (template) or child (stylesheet) directory path. - $is_parent_theme_block = str_starts_with( $style_path_norm, $template_path_norm ); - $is_child_theme_block = str_starts_with( $style_path_norm, $stylesheet_path_norm ); + $is_parent_theme_block = str_starts_with( $style_path_norm, trailingslashit( $template_path_norm ) ); + $is_child_theme_block = str_starts_with( $style_path_norm, trailingslashit( $stylesheet_path_norm ) ); $is_theme_block = ( $is_parent_theme_block || $is_child_theme_block ); if ( $is_core_block ) { diff --git a/tests/phpunit/tests/blocks/register.php b/tests/phpunit/tests/blocks/register.php index 0a5047c6d1..8ad1a88f3a 100644 --- a/tests/phpunit/tests/blocks/register.php +++ b/tests/phpunit/tests/blocks/register.php @@ -270,6 +270,21 @@ class Tests_Blocks_Register extends WP_UnitTestCase { $result = register_block_script_handle( $metadata, 'script' ); $this->assertSame( 'unit-tests-test-block-script', $result ); + + // Test the behavior directly within the unit test + $this->assertFalse( + strpos( + wp_normalize_path( realpath( dirname( $metadata['file'] ) . '/' . $metadata['script'] ) ), + trailingslashit( wp_normalize_path( get_template_directory() ) ) + ) === 0 + ); + + $this->assertFalse( + strpos( + wp_normalize_path( realpath( dirname( $metadata['file'] ) . '/' . $metadata['script'] ) ), + trailingslashit( wp_normalize_path( get_stylesheet_directory() ) ) + ) === 0 + ); } /** @@ -438,6 +453,21 @@ class Tests_Blocks_Register extends WP_UnitTestCase { wp_normalize_path( realpath( DIR_TESTDATA . '/blocks/notice/block.css' ) ), wp_normalize_path( wp_styles()->get_data( 'unit-tests-test-block-style', 'path' ) ) ); + + // Test the behavior directly within the unit test + $this->assertFalse( + strpos( + wp_normalize_path( realpath( dirname( $metadata['file'] ) . '/' . $metadata['style'] ) ), + trailingslashit( wp_normalize_path( get_template_directory() ) ) + ) === 0 + ); + + $this->assertFalse( + strpos( + wp_normalize_path( realpath( dirname( $metadata['file'] ) . '/' . $metadata['style'] ) ), + trailingslashit( wp_normalize_path( get_stylesheet_directory() ) ) + ) === 0 + ); } /**