Editor: Introduce `WP_Theme_JSON::prepend_to_selector()` to improve code quality and performance.
The `WP_Theme_JSON::append_to_selector()` method was previously used for both appending and prepending which violated the single responsibility principle. It resulted in additional conditionals which also came at a performance cost, particularly because the method is called over 1,000 times during a regular WordPress request. With the new `WP_Theme_JSON::prepend_to_selector()` method, there are now two distinct methods for the two distinct purposes. The now useless third parameter on `WP_Theme_JSON::append_to_selector()` has been removed (rather than deprecated), which is acceptable given that it is a protected method on a class that is not intended for extensions. Props bor0, costdev, flixos90, isabel_brison, oandregal, spacedmonkey. Fixes #58193. See #58457. Built from https://develop.svn.wordpress.org/trunk@55950 git-svn-id: http://core.svn.wordpress.org/trunk@55462 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
parent
b1fed29f55
commit
ae515caebf
|
@ -795,20 +795,45 @@ class WP_Theme_JSON {
|
||||||
*
|
*
|
||||||
* @since 5.8.0
|
* @since 5.8.0
|
||||||
* @since 6.1.0 Added append position.
|
* @since 6.1.0 Added append position.
|
||||||
|
* @since 6.3.0 Removed append position parameter.
|
||||||
*
|
*
|
||||||
* @param string $selector Original selector.
|
* @param string $selector Original selector.
|
||||||
* @param string $to_append Selector to append.
|
* @param string $to_append Selector to append.
|
||||||
* @param string $position A position sub-selector should be appended. Default 'right'.
|
|
||||||
* @return string The new selector.
|
* @return string The new selector.
|
||||||
*/
|
*/
|
||||||
protected static function append_to_selector( $selector, $to_append, $position = 'right' ) {
|
protected static function append_to_selector( $selector, $to_append ) {
|
||||||
if ( ! str_contains( $selector, ',' ) ) {
|
if ( ! str_contains( $selector, ',' ) ) {
|
||||||
return 'right' === $position ? $selector . $to_append : $to_append . $selector;
|
return $selector . $to_append;
|
||||||
}
|
}
|
||||||
$new_selectors = array();
|
$new_selectors = array();
|
||||||
$selectors = explode( ',', $selector );
|
$selectors = explode( ',', $selector );
|
||||||
foreach ( $selectors as $sel ) {
|
foreach ( $selectors as $sel ) {
|
||||||
$new_selectors[] = 'right' === $position ? $sel . $to_append : $to_append . $sel;
|
$new_selectors[] = $sel . $to_append;
|
||||||
|
}
|
||||||
|
return implode( ',', $new_selectors );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prepends a sub-selector to an existing one.
|
||||||
|
*
|
||||||
|
* Given the compounded $selector "h1, h2, h3"
|
||||||
|
* and the $to_prepend selector ".some-class " the result will be
|
||||||
|
* ".some-class h1, .some-class h2, .some-class h3".
|
||||||
|
*
|
||||||
|
* @since 6.3.0
|
||||||
|
*
|
||||||
|
* @param string $selector Original selector.
|
||||||
|
* @param string $to_prepend Selector to prepend.
|
||||||
|
* @return string The new selector.
|
||||||
|
*/
|
||||||
|
protected static function prepend_to_selector( $selector, $to_prepend ) {
|
||||||
|
if ( ! str_contains( $selector, ',' ) ) {
|
||||||
|
return $to_prepend . $selector;
|
||||||
|
}
|
||||||
|
$new_selectors = array();
|
||||||
|
$selectors = explode( ',', $selector );
|
||||||
|
foreach ( $selectors as $sel ) {
|
||||||
|
$new_selectors[] = $to_prepend . $sel;
|
||||||
}
|
}
|
||||||
return implode( ',', $new_selectors );
|
return implode( ',', $new_selectors );
|
||||||
}
|
}
|
||||||
|
@ -900,7 +925,7 @@ class WP_Theme_JSON {
|
||||||
$element_selector = array( $el_selector );
|
$element_selector = array( $el_selector );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
$element_selector[] = static::append_to_selector( $el_selector, $selector . ' ', 'left' );
|
$element_selector[] = static::prepend_to_selector( $el_selector, $selector . ' ' );
|
||||||
}
|
}
|
||||||
static::$blocks_metadata[ $block_name ]['elements'][ $el_name ] = implode( ',', $element_selector );
|
static::$blocks_metadata[ $block_name ]['elements'][ $el_name ] = implode( ',', $element_selector );
|
||||||
}
|
}
|
||||||
|
@ -1539,8 +1564,11 @@ class WP_Theme_JSON {
|
||||||
foreach ( $slugs as $slug ) {
|
foreach ( $slugs as $slug ) {
|
||||||
$css_var = static::replace_slug_in_string( $preset_metadata['css_vars'], $slug );
|
$css_var = static::replace_slug_in_string( $preset_metadata['css_vars'], $slug );
|
||||||
$class_name = static::replace_slug_in_string( $class, $slug );
|
$class_name = static::replace_slug_in_string( $class, $slug );
|
||||||
|
|
||||||
|
// $selector is often empty, so we can save ourselves the `append_to_selector()` call then.
|
||||||
|
$new_selector = '' === $selector ? $class_name : static::append_to_selector( $selector, $class_name );
|
||||||
$stylesheet .= static::to_ruleset(
|
$stylesheet .= static::to_ruleset(
|
||||||
static::append_to_selector( $selector, $class_name ),
|
$new_selector,
|
||||||
array(
|
array(
|
||||||
array(
|
array(
|
||||||
'name' => $property,
|
'name' => $property,
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
*
|
*
|
||||||
* @global string $wp_version
|
* @global string $wp_version
|
||||||
*/
|
*/
|
||||||
$wp_version = '6.3-alpha-55949';
|
$wp_version = '6.3-alpha-55950';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.
|
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.
|
||||||
|
|
Loading…
Reference in New Issue