Commit 9f8afa09da for wordpress.org
commit 9f8afa09da8be576a1dcc46491f5b89d80e8f6ce
Author: ramonopoly <ramonopoly@git.wordpress.org>
Date: Mon Sep 14 01:51:50 2026 +0000
Editor: Retain responsive styles in block style variation partials
Responsive `@tablet` and `@mobile` styles were silently dropped from block style variations declared in a standalone JSON partial in a theme's `styles/` directory.
This commit adds the responsive breakpoint states to the top-level styles schema, mirroring what the block style variation branch already does. This restores the parity to the two schemas.
Developed in: https://github.com/WordPress/wordpress-develop/pull/13325
Props adamsilverstein, andraganescu, andrewserong, firdaus666, mitgiselle, pbiron, ramonopoly, talldanwp.
Fixes #65992.
Built from https://develop.svn.wordpress.org/trunk@63610
git-svn-id: http://core.svn.wordpress.org/trunk@62786 1a063a9b-81f0-0310-95a4-ce76da25c4cd
diff --git a/wp-includes/class-wp-theme-json.php b/wp-includes/class-wp-theme-json.php
index e91d547eb5..fb41bde81a 100644
--- a/wp-includes/class-wp-theme-json.php
+++ b/wp-includes/class-wp-theme-json.php
@@ -1266,6 +1266,8 @@ class WP_Theme_JSON {
* @since 5.9.0 Added the `$valid_block_names` and `$valid_element_name` parameters.
* @since 6.3.0 Added the `$valid_variations` parameter.
* @since 6.6.0 Updated schema to allow extended block style variations.
+ * @since 7.1.1 Updated schema to allow responsive breakpoint states and pseudo-selectors
+ * at the top level of `styles` for block style variation partials.
*
* @param array $input Structure to sanitize.
* @param array $valid_block_names List of valid block names.
@@ -1427,7 +1429,6 @@ class WP_Theme_JSON {
foreach ( array_keys( $responsive_media_queries ) as $breakpoint_state ) {
$variation_schema[ $breakpoint_state ] = $styles_non_top_level;
$variation_schema[ $breakpoint_state ]['elements'] = $schema_styles_elements;
- $variation_schema[ $breakpoint_state ]['blocks'] = $schema_styles_blocks;
if ( isset( static::VALID_BLOCK_PSEUDO_SELECTORS[ $block ] ) ) {
foreach ( static::VALID_BLOCK_PSEUDO_SELECTORS[ $block ] as $pseudo_selector ) {
@@ -1457,6 +1458,47 @@ class WP_Theme_JSON {
$schema['settings']['blocks'] = $schema_settings_blocks;
$schema['settings']['typography']['fontFamilies'] = static::schema_in_root_and_per_origin( static::FONT_FAMILY_SCHEMA );
+ /*
+ * Add block style variation states to the top-level styles schema.
+ *
+ * Block style variations defined in a standalone JSON partial within a
+ * theme's `styles` directory declare their styles at the root of the
+ * `styles` object, so they are sanitized against the top-level schema.
+ * It needs to allow the same states that are allowed for variations
+ * declared inline in theme.json, otherwise those states are silently
+ * removed as unknown keys.
+ *
+ * The `blockTypes` property is only present on block style variation
+ * partials, so it both identifies the config as a variation and
+ * determines which pseudo-selectors are valid for it. Regular
+ * theme.json files are unaffected.
+ */
+ if ( ! empty( $input['blockTypes'] ) && is_array( $input['blockTypes'] ) ) {
+ $variation_pseudo_selectors = array();
+ foreach ( $input['blockTypes'] as $variation_block_type ) {
+ if ( isset( static::VALID_BLOCK_PSEUDO_SELECTORS[ $variation_block_type ] ) ) {
+ $variation_pseudo_selectors = array_merge(
+ $variation_pseudo_selectors,
+ static::VALID_BLOCK_PSEUDO_SELECTORS[ $variation_block_type ]
+ );
+ }
+ }
+ $variation_pseudo_selectors = array_unique( $variation_pseudo_selectors );
+
+ foreach ( array_keys( $responsive_media_queries ) as $breakpoint_state ) {
+ $schema['styles'][ $breakpoint_state ] = $styles_non_top_level;
+ $schema['styles'][ $breakpoint_state ]['elements'] = $schema_styles_elements;
+
+ foreach ( $variation_pseudo_selectors as $pseudo_selector ) {
+ $schema['styles'][ $breakpoint_state ][ $pseudo_selector ] = $styles_non_top_level;
+ }
+ }
+
+ foreach ( $variation_pseudo_selectors as $pseudo_selector ) {
+ $schema['styles'][ $pseudo_selector ] = $styles_non_top_level;
+ }
+ }
+
// Remove anything that's not present in the schema.
foreach ( array( 'styles', 'settings' ) as $subtree ) {
if ( ! isset( $input[ $subtree ] ) ) {
diff --git a/wp-includes/version.php b/wp-includes/version.php
index ef046faf5d..baa870466b 100644
--- a/wp-includes/version.php
+++ b/wp-includes/version.php
@@ -16,7 +16,7 @@
*
* @global string $wp_version
*/
-$wp_version = '7.2-alpha-63609';
+$wp_version = '7.2-alpha-63610';
/**
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.