@@ -750,7 +750,7 @@ public static function get_element_class_name( $element ) {
750750 * @param string $origin Optional. What source of data this object represents.
751751 * One of 'blocks', 'default', 'theme', or 'custom'. Default 'theme'.
752752 */
753- public function __construct ( $ theme_json = array ( 'version ' => WP_Theme_JSON ::LATEST_SCHEMA ), $ origin = 'theme ' ) {
753+ public function __construct ( $ theme_json = array ( 'version ' => self ::LATEST_SCHEMA ), $ origin = 'theme ' ) {
754754 if ( ! in_array ( $ origin , static ::VALID_ORIGINS , true ) ) {
755755 $ origin = 'theme ' ;
756756 }
@@ -1247,7 +1247,8 @@ public function get_settings() {
12471247 * @since 5.8.0
12481248 * @since 5.9.0 Removed the `$type` parameter, added the `$types` and `$origins` parameters.
12491249 * @since 6.3.0 Add fallback layout styles for Post Template when block gap support isn't available.
1250- * @since 6.6.0 Added `skip_root_layout_styles` option to omit layout styles if desired.
1250+ * @since 6.6.0 Added boolean `skip_root_layout_styles` and `include_block_style_variations` options
1251+ * to control styles output as desired.
12511252 *
12521253 * @param string[] $types Types of styles to load. Will load all by default. It accepts:
12531254 * - `variables`: only the CSS Custom Properties for presets & custom ones.
@@ -1257,9 +1258,10 @@ public function get_settings() {
12571258 * @param array $options {
12581259 * Optional. An array of options for now used for internal purposes only (may change without notice).
12591260 *
1260- * @type string $scope Makes sure all style are scoped to a given selector
1261- * @type string $root_selector Overwrites and forces a given selector to be used on the root node
1262- * @type bool $skip_root_layout_styles Omits root layout styles from the generated stylesheet. Default false.
1261+ * @type string $scope Makes sure all style are scoped to a given selector
1262+ * @type string $root_selector Overwrites and forces a given selector to be used on the root node
1263+ * @type bool $skip_root_layout_styles Omits root layout styles from the generated stylesheet. Default false.
1264+ * @type bool $include_block_style_variations Includes styles for block style variations in the generated stylesheet. Default false.
12631265 * }
12641266 * @return string The resulting stylesheet.
12651267 */
@@ -1281,7 +1283,7 @@ public function get_stylesheet( $types = array( 'variables', 'styles', 'presets'
12811283 }
12821284
12831285 $ blocks_metadata = static ::get_blocks_metadata ();
1284- $ style_nodes = static ::get_style_nodes ( $ this ->theme_json , $ blocks_metadata );
1286+ $ style_nodes = static ::get_style_nodes ( $ this ->theme_json , $ blocks_metadata, $ options );
12851287 $ setting_nodes = static ::get_setting_nodes ( $ this ->theme_json , $ blocks_metadata );
12861288
12871289 $ root_style_key = array_search ( static ::ROOT_BLOCK_SELECTOR , array_column ( $ style_nodes , 'selector ' ), true );
@@ -2446,12 +2448,18 @@ protected static function get_setting_nodes( $theme_json, $selectors = array() )
24462448 * ]
24472449 *
24482450 * @since 5.8.0
2451+ * @since 6.6.0 Added options array for modifying generated nodes.
24492452 *
24502453 * @param array $theme_json The tree to extract style nodes from.
24512454 * @param array $selectors List of selectors per block.
2455+ * @param array $options {
2456+ * Optional. An array of options for now used for internal purposes only (may change without notice).
2457+ *
2458+ * @type bool $include_block_style_variations Includes style nodes for block style variations. Default false.
2459+ * }
24522460 * @return array An array of style nodes metadata.
24532461 */
2454- protected static function get_style_nodes ( $ theme_json , $ selectors = array () ) {
2462+ protected static function get_style_nodes ( $ theme_json , $ selectors = array (), $ options = array () ) {
24552463 $ nodes = array ();
24562464 if ( ! isset ( $ theme_json ['styles ' ] ) ) {
24572465 return $ nodes ;
@@ -2493,7 +2501,7 @@ protected static function get_style_nodes( $theme_json, $selectors = array() ) {
24932501 return $ nodes ;
24942502 }
24952503
2496- $ block_nodes = static ::get_block_nodes ( $ theme_json );
2504+ $ block_nodes = static ::get_block_nodes ( $ theme_json, $ selectors , $ options );
24972505 foreach ( $ block_nodes as $ block_node ) {
24982506 $ nodes [] = $ block_node ;
24992507 }
@@ -2564,12 +2572,19 @@ private static function update_separator_declarations( $declarations ) {
25642572 *
25652573 * @since 6.1.0
25662574 * @since 6.3.0 Refactored and stabilized selectors API.
2575+ * @since 6.6.0 Added optional selectors and options for generating block nodes.
25672576 *
25682577 * @param array $theme_json The theme.json converted to an array.
2578+ * @param array $selectors Optional list of selectors per block.
2579+ * @param array $options {
2580+ * Optional. An array of options for now used for internal purposes only (may change without notice).
2581+ *
2582+ * @type bool $include_block_style_variations Includes nodes for block style variations. Default false.
2583+ * }
25692584 * @return array The block nodes in theme.json.
25702585 */
2571- private static function get_block_nodes ( $ theme_json ) {
2572- $ selectors = static ::get_blocks_metadata ();
2586+ private static function get_block_nodes ( $ theme_json, $ selectors = array (), $ options = array () ) {
2587+ $ selectors = empty ( $ selectors ) ? static ::get_blocks_metadata () : $ selectors ;
25732588 $ nodes = array ();
25742589 if ( ! isset ( $ theme_json ['styles ' ] ) ) {
25752590 return $ nodes ;
@@ -2597,7 +2612,8 @@ private static function get_block_nodes( $theme_json ) {
25972612 }
25982613
25992614 $ variation_selectors = array ();
2600- if ( isset ( $ node ['variations ' ] ) ) {
2615+ $ include_variations = $ options ['include_block_style_variations ' ] ?? false ;
2616+ if ( $ include_variations && isset ( $ node ['variations ' ] ) ) {
26012617 foreach ( $ node ['variations ' ] as $ variation => $ node ) {
26022618 $ variation_selectors [] = array (
26032619 'path ' => array ( 'styles ' , 'blocks ' , $ name , 'variations ' , $ variation ),
@@ -3280,7 +3296,8 @@ public static function remove_insecure_properties( $theme_json, $origin = 'theme
32803296 $ theme_json = static ::sanitize ( $ theme_json , $ valid_block_names , $ valid_element_names , $ valid_variations );
32813297
32823298 $ blocks_metadata = static ::get_blocks_metadata ();
3283- $ style_nodes = static ::get_style_nodes ( $ theme_json , $ blocks_metadata );
3299+ $ style_options = array ( 'include_block_style_variations ' => true ); // Allow variations data.
3300+ $ style_nodes = static ::get_style_nodes ( $ theme_json , $ blocks_metadata , $ style_options );
32843301
32853302 foreach ( $ style_nodes as $ metadata ) {
32863303 $ input = _wp_array_get ( $ theme_json , $ metadata ['path ' ], array () );
0 commit comments