WP_Theme_JSON::process_pseudo_selectorsprivateWP 1.0

Processes pseudo-selectors for any node (block or variation).

Method of the class: WP_Theme_JSON{}

No Hooks.

Returns

Array. Array of pseudo-selector declarations.

Usage

// private - for code of main (parent) class only
$result = $this->process_pseudo_selectors( $node, $base_selector, $settings, $block_name, $block_metadata, $style_variation );
$node(array) (required)
The node data (block or variation).
$base_selector(string) (required)
The base selector.
$settings(array) (required)
The theme settings.
$block_name(string) (required)
The block name.
$block_metadata(array|null)
Metadata about the block to get styles for.
Default: null
$style_variation(array|null)
Style variation metadata.
Default: null

WP_Theme_JSON::process_pseudo_selectors() code WP 7.1

private function process_pseudo_selectors( $node, $base_selector, $settings, $block_name, $block_metadata = null, $style_variation = null ) {
	$pseudo_declarations = array();
	$add_declarations    = static function ( $selector, $declarations ) use ( &$pseudo_declarations ) {
		if ( empty( $declarations ) ) {
			return;
		}

		if ( isset( $pseudo_declarations[ $selector ] ) ) {
			$pseudo_declarations[ $selector ] = array_merge(
				$pseudo_declarations[ $selector ],
				$declarations
			);
		} else {
			$pseudo_declarations[ $selector ] = $declarations;
		}
	};

	if ( ! isset( static::VALID_BLOCK_PSEUDO_SELECTORS[ $block_name ] ) ) {
		return $pseudo_declarations;
	}

	foreach ( static::VALID_BLOCK_PSEUDO_SELECTORS[ $block_name ] as $pseudo_selector ) {
		if ( isset( $node[ $pseudo_selector ] ) ) {
			$pseudo_node = $node[ $pseudo_selector ];

			if ( is_array( $block_metadata ) ) {
				$feature_declarations = $this->get_feature_declarations_for_node( $block_metadata, $pseudo_node );
				$feature_declarations = static::update_paragraph_text_indent_selector( $feature_declarations, $settings, $block_name );
				$feature_declarations = static::update_button_width_declarations( $feature_declarations, $settings );

				foreach ( $feature_declarations as $feature_selector => $declarations ) {
					$target_selector   = is_array( $style_variation )
						? static::get_block_style_variation_feature_selector( $style_variation, $feature_selector )
						: $feature_selector;
					$combined_selector = static::append_to_selector( $target_selector, $pseudo_selector );

					$add_declarations( $combined_selector, $declarations );
				}
			}

			$combined_selector = static::append_to_selector( $base_selector, $pseudo_selector );
			$declarations      = static::compute_style_properties( $pseudo_node, $settings, null, null );
			$add_declarations( $combined_selector, $declarations );
		}
	}

	return $pseudo_declarations;
}