mirror of
https://github.com/WordPress/WordPress.git
synced 2024-12-23 01:27:36 +01:00
Editor: Fix bug where it was not possible to style custom block elements in theme.json
.
This changeset resolves a bug where WordPress would only allow HTML elements within core's own blocks to be styled in `theme.json`. Prior to this change, any `theme.json` rules applying to elements in custom blocks were ignored. With this fix it is now possible to style third-party block elements in `theme.json`. Props flixos90, azaozz, costdev, glendaviesnz, spacedmonkey, oandregal. Fixes #57868. Built from https://develop.svn.wordpress.org/trunk@56254 git-svn-id: http://core.svn.wordpress.org/trunk@55766 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
parent
dce6425913
commit
75f25fd334
@ -320,20 +320,10 @@ function wp_add_global_styles_for_blocks() {
|
||||
|
||||
// The likes of block element styles from theme.json do not have $metadata['name'] set.
|
||||
if ( ! isset( $metadata['name'] ) && ! empty( $metadata['path'] ) ) {
|
||||
$result = array_values(
|
||||
array_filter(
|
||||
$metadata['path'],
|
||||
static function ( $item ) {
|
||||
if ( str_contains( $item, 'core/' ) ) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
)
|
||||
);
|
||||
if ( isset( $result[0] ) ) {
|
||||
if ( str_starts_with( $result[0], 'core/' ) ) {
|
||||
$block_name = str_replace( 'core/', '', $result[0] );
|
||||
$block_name = wp_get_block_name_from_theme_json_path( $metadata['path'] );
|
||||
if ( $block_name ) {
|
||||
if ( str_starts_with( $block_name, 'core/' ) ) {
|
||||
$block_name = str_replace( 'core/', '', $block_name );
|
||||
$stylesheet_handle = 'wp-block-' . $block_name;
|
||||
}
|
||||
wp_add_inline_style( $stylesheet_handle, $block_css );
|
||||
@ -342,6 +332,47 @@ function wp_add_global_styles_for_blocks() {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the block name from a given theme.json path.
|
||||
*
|
||||
* @since 6.3.0
|
||||
* @access private
|
||||
*
|
||||
* @param array $path An array of keys describing the path to a property in theme.json.
|
||||
* @return string Identified block name, or empty string if none found.
|
||||
*/
|
||||
function wp_get_block_name_from_theme_json_path( $path ) {
|
||||
// Block name is expected to be the third item after 'styles' and 'blocks'.
|
||||
if (
|
||||
count( $path ) >= 3
|
||||
&& 'styles' === $path[0]
|
||||
&& 'blocks' === $path[1]
|
||||
&& str_contains( $path[2], '/' )
|
||||
) {
|
||||
return $path[2];
|
||||
}
|
||||
|
||||
/*
|
||||
* As fallback and for backward compatibility, allow any core block to be
|
||||
* at any position.
|
||||
*/
|
||||
$result = array_values(
|
||||
array_filter(
|
||||
$path,
|
||||
static function ( $item ) {
|
||||
if ( str_contains( $item, 'core/' ) ) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
)
|
||||
);
|
||||
if ( isset( $result[0] ) ) {
|
||||
return $result[0];
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether a theme or its parent has a theme.json file.
|
||||
*
|
||||
|
@ -16,7 +16,7 @@
|
||||
*
|
||||
* @global string $wp_version
|
||||
*/
|
||||
$wp_version = '6.3-beta4-56253';
|
||||
$wp_version = '6.3-beta4-56254';
|
||||
|
||||
/**
|
||||
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.
|
||||
|
Loading…
Reference in New Issue
Block a user