wp_build_state_selector()
Builds a scoped selector from a block selector and optional pseudo-state.
No Hooks.
Returns
string. Scoped selector.
Usage
wp_build_state_selector( $base_selector, $block_selector, $state );
- $base_selector(string) (required)
- Block-instance scoping selector.
- $block_selector(string|null) (required)
- Block or feature selector from metadata.
- $state(string) (required)
- Pseudo-state selector.
Changelog
| Since 7.1.0 | Introduced. |
wp_build_state_selector() wp build state selector code WP 7.1
function wp_build_state_selector( $base_selector, $block_selector, $state ) {
if ( ! is_string( $block_selector ) || '' === trim( $block_selector ) ) {
return $base_selector . $state;
}
$selectors = wp_split_selector_list( $block_selector );
$scoped_selectors = array();
foreach ( $selectors as $selector ) {
$selector = trim( $selector );
if ( '' === $selector ) {
continue;
}
/*
* Replace only the leading block selector part (e.g. class name,
* attribute selector, ID, or tag name) with the block instance selector.
* Preserve anything after that prefix, including modifier classes on the
* same element and combinators without spaces.
*/
if ( preg_match( '/^([.#]?[-_a-zA-Z0-9]+|\[[^\]]+\])/', $selector, $matches ) ) {
$scoped_selectors[] = $base_selector . substr( $selector, strlen( $matches[0] ) ) . $state;
continue;
}
$scoped_selectors[] = $base_selector . $state;
}
return empty( $scoped_selectors )
? $base_selector . $state
: implode( ', ', $scoped_selectors );
}