Title: WP_Style_Engine_Processor::combine_rules_selectors
Published: November 2, 2022
Last modified: May 20, 2026

---

# WP_Style_Engine_Processor::combine_rules_selectors()

## In this article

 * [Source](https://developer.wordpress.org/reference/classes/wp_style_engine_processor/combine_rules_selectors/?output_format=md#source)
 * [Related](https://developer.wordpress.org/reference/classes/wp_style_engine_processor/combine_rules_selectors/?output_format=md#related)
 * [Changelog](https://developer.wordpress.org/reference/classes/wp_style_engine_processor/combine_rules_selectors/?output_format=md#changelog)

[ Back to top](https://developer.wordpress.org/reference/classes/wp_style_engine_processor/combine_rules_selectors/?output_format=md#wp--skip-link--target)

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

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

## 󠀁[Source](https://developer.wordpress.org/reference/classes/wp_style_engine_processor/combine_rules_selectors/?output_format=md#source)󠁿

    ```php
    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 );
    	}
    }
    ```

[View all references](https://developer.wordpress.org/reference/files/wp-includes/style-engine/class-wp-style-engine-processor.php/)
[View on Trac](https://core.trac.wordpress.org/browser/tags/7.0/src/wp-includes/style-engine/class-wp-style-engine-processor.php#L150)
[View on GitHub](https://github.com/WordPress/wordpress-develop/blob/7.0/src/wp-includes/style-engine/class-wp-style-engine-processor.php#L150-L180)

## 󠀁[Related](https://developer.wordpress.org/reference/classes/wp_style_engine_processor/combine_rules_selectors/?output_format=md#related)󠁿

| Uses | Description | 
| [WP_Style_Engine_CSS_Rule::__construct()](https://developer.wordpress.org/reference/classes/wp_style_engine_css_rule/__construct/)`wp-includes/style-engine/class-wp-style-engine-css-rule.php` |

Constructor.

  | 
| [wp_json_encode()](https://developer.wordpress.org/reference/functions/wp_json_encode/)`wp-includes/functions.php` |

Encodes a variable into JSON, with some confidence checks.

  |

| Used by | Description | 
| [WP_Style_Engine_Processor::get_css()](https://developer.wordpress.org/reference/classes/wp_style_engine_processor/get_css/)`wp-includes/style-engine/class-wp-style-engine-processor.php` |

Gets the CSS rules as a string.

  |

## 󠀁[Changelog](https://developer.wordpress.org/reference/classes/wp_style_engine_processor/combine_rules_selectors/?output_format=md#changelog)󠁿

| Version | Description | 
| [6.1.0](https://developer.wordpress.org/reference/since/6.1.0/) | Introduced. |

## User Contributed Notes

You must [log in](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fclasses%2Fwp_style_engine_processor%2Fcombine_rules_selectors%2F)
before being able to contribute a note or feedback.