WP_Theme_JSON::prepend_to_selector
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".
Method of the class: WP_Theme_JSON{}
No Hooks.
Returns
String. The new selector.
Usage
$result = WP_Theme_JSON::prepend_to_selector( $selector, $to_prepend );
- $selector(string) (required)
- Original selector.
- $to_prepend(string) (required)
- Selector to prepend.
Changelog
| Since 6.3.0 | Introduced. |
WP_Theme_JSON::prepend_to_selector() WP Theme JSON::prepend to selector code WP 7.1
protected static function prepend_to_selector( $selector, $to_prepend ) {
if ( ! str_contains( $selector, ',' ) ) {
return $to_prepend . trim( $selector, " \t\n" );
}
/**
* Check for an opportunity to skip the more-costly selector splitting.
* This should be possible if there are no comments, strings, functions,
* URLs, escapes, or comment declaration openers (CDOs).
*
* Note that this means the fast-path will not apply for selectors like
* the following incomplete list:
*
* - `[class ~= "wide"]`
* - `.wp-block:is(.is-style-a, .is-style-b)`
* - `:nth-child(1)`
*
* These syntax forms all present opportunities where a comma may not
* separate selectors. If none of the start characters are present,
* there should be no way for a comma to mean anything other than a
* comma token. The exception are syntax errors, which are not handled here.
*
* @see https://www.w3.org/TR/css-syntax-3/#parse-comma-separated-list-of-component-values
*/
if ( strlen( $selector ) === strcspn( $selector, '/\'"(<\\' ) ) {
return $to_prepend . preg_replace( '~[ \t\n]*,[ \t\n]*~', ", {$to_prepend}", trim( $selector, " \t\n" ) );
}
$new_selectors = array();
$selectors = static::split_selector_list( $selector );
foreach ( $selectors as $sel ) {
$new_selectors[] = $to_prepend . $sel;
}
return implode( ', ', $new_selectors );
}