WP_Style_Engine_Processor::combine_rules_selectors()

In this article

This function’s access is marked private. This means it is not intended for use by plugin or theme developers, only in other core functions. It is listed here for completeness.

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

VersionDescription
6.1.0Introduced.

User Contributed Notes

You must log in before being able to contribute a note or feedback.