W3cubDocs

/WordPress

WP_Style_Engine_Processor::combine_rules_selectors()

Combines selectors from the rules store when they have the same styles.

Source

private function combine_rules_selectors() {
	// Build an array of selectors along with the JSON-ified styles to make comparisons easier.
	$selectors_json = array();
	foreach ( $this->css_rules as $rule ) {
		$declarations = $rule->get_declarations()->get_declarations();
		ksort( $declarations );
		$selectors_json[ $rule->get_selector() ] = wp_json_encode( $declarations );
	}

	// Combine selectors that have the same styles.
	foreach ( $selectors_json as $selector => $json ) {
		// Get selectors that use the same styles.
		$duplicates = array_keys( $selectors_json, $json, true );
		// Skip if there are no duplicates.
		if ( 1 >= count( $duplicates ) ) {
			continue;
		}

		$declarations = $this->css_rules[ $selector ]->get_declarations();

		foreach ( $duplicates as $key ) {
			// Unset the duplicates from the $selectors_json array to avoid looping through them as well.
			unset( $selectors_json[ $key ] );
			// Remove the rules from the rules collection.
			unset( $this->css_rules[ $key ] );
		}
		// Create a new rule with the combined selectors.
		$duplicate_selectors                     = implode( ',', $duplicates );
		$this->css_rules[ $duplicate_selectors ] = new WP_Style_Engine_CSS_Rule( $duplicate_selectors, $declarations );
	}
}

Changelog

Version Description
6.1.0 Introduced.

© 2003–2024 WordPress Foundation
Licensed under the GNU GPLv2+ License.
https://developer.wordpress.org/reference/classes/wp_style_engine_processor/combine_rules_selectors