Skip to content

Commit 31e2aaa

Browse files
committed
Revert "Global Styles: Lift classic block restrictions."
This reverts commit fd2693d.
1 parent fd2693d commit 31e2aaa

File tree

9 files changed

+163
-115
lines changed

9 files changed

+163
-115
lines changed

src/wp-admin/menu.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@
237237
}
238238

239239
// Font Library menu item.
240-
$submenu['themes.php'][9] = array( __( 'Fonts' ), 'edit_theme_options', 'font-library.php' );
240+
$submenu['themes.php'][8] = array( __( 'Fonts' ), 'edit_theme_options', 'font-library.php' );
241241

242242
$customize_url = add_query_arg( 'return', urlencode( remove_query_arg( wp_removable_query_args(), wp_unslash( $_SERVER['REQUEST_URI'] ) ) ), 'customize.php' );
243243

src/wp-includes/block-editor.php

Lines changed: 33 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -525,33 +525,40 @@ function get_block_editor_settings( array $custom_settings, $block_editor_contex
525525
}
526526
}
527527

528-
$block_classes = array(
529-
'css' => 'styles',
530-
'__unstableType' => 'theme',
531-
'isGlobalStyles' => true,
532-
);
533-
$actual_css = wp_get_global_stylesheet( array( $block_classes['css'] ) );
534-
if ( '' !== $actual_css ) {
535-
$block_classes['css'] = $actual_css;
536-
$global_styles[] = $block_classes;
537-
}
538-
539-
// Get any additional css from the customizer and add it before global styles custom CSS.
540-
$global_styles[] = array(
541-
'css' => wp_get_custom_css(),
542-
'__unstableType' => 'user',
543-
'isGlobalStyles' => false,
544-
);
528+
if ( wp_theme_has_theme_json() ) {
529+
$block_classes = array(
530+
'css' => 'styles',
531+
'__unstableType' => 'theme',
532+
'isGlobalStyles' => true,
533+
);
534+
$actual_css = wp_get_global_stylesheet( array( $block_classes['css'] ) );
535+
if ( '' !== $actual_css ) {
536+
$block_classes['css'] = $actual_css;
537+
$global_styles[] = $block_classes;
538+
}
545539

546-
/*
547-
* Add the custom CSS as a separate stylesheet so any invalid CSS
548-
* entered by users does not break other global styles.
549-
*/
550-
$global_styles[] = array(
551-
'css' => wp_get_global_stylesheet( array( 'custom-css' ) ),
552-
'__unstableType' => 'user',
553-
'isGlobalStyles' => true,
554-
);
540+
/*
541+
* Add the custom CSS as a separate stylesheet so any invalid CSS
542+
* entered by users does not break other global styles.
543+
*/
544+
$global_styles[] = array(
545+
'css' => wp_get_global_stylesheet( array( 'custom-css' ) ),
546+
'__unstableType' => 'user',
547+
'isGlobalStyles' => true,
548+
);
549+
} else {
550+
// If there is no `theme.json` file, ensure base layout styles are still available.
551+
$block_classes = array(
552+
'css' => 'base-layout-styles',
553+
'__unstableType' => 'base-layout',
554+
'isGlobalStyles' => true,
555+
);
556+
$actual_css = wp_get_global_stylesheet( array( $block_classes['css'] ) );
557+
if ( '' !== $actual_css ) {
558+
$block_classes['css'] = $actual_css;
559+
$global_styles[] = $block_classes;
560+
}
561+
}
555562

556563
$editor_settings['styles'] = array_merge( $global_styles, get_block_editor_theme_styles() );
557564

src/wp-includes/class-wp-theme-json-resolver.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -480,6 +480,17 @@ public static function get_user_data_from_wp_global_styles( $theme, $create_post
480480
$theme = wp_get_theme();
481481
}
482482

483+
/*
484+
* Bail early if the theme does not support a theme.json.
485+
*
486+
* Since wp_theme_has_theme_json() only supports the active
487+
* theme, the extra condition for whether $theme is the active theme is
488+
* present here.
489+
*/
490+
if ( $theme->get_stylesheet() === get_stylesheet() && ! wp_theme_has_theme_json() ) {
491+
return array();
492+
}
493+
483494
$user_cpt = array();
484495
$post_type_filter = 'wp_global_styles';
485496
$stylesheet = $theme->get_stylesheet();

src/wp-includes/class-wp-theme-json.php

Lines changed: 47 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1326,13 +1326,12 @@ public function get_settings() {
13261326
* @since 6.3.0 Add fallback layout styles for Post Template when block gap support isn't available.
13271327
* @since 6.6.0 Added boolean `skip_root_layout_styles` and `include_block_style_variations` options
13281328
* to control styles output as desired.
1329-
* @since 7.0.0 Deprecated 'base-layout-styles' type; added `base_layout_styles` option for classic themes.
13301329
*
13311330
* @param string[] $types Types of styles to load. Will load all by default. It accepts:
13321331
* - `variables`: only the CSS Custom Properties for presets & custom ones.
13331332
* - `styles`: only the styles section in theme.json.
13341333
* - `presets`: only the classes for the presets.
1335-
* - `base-layout-styles`: only the base layout styles. Deprecated in 7.0.0.
1334+
* - `base-layout-styles`: only the base layout styles.
13361335
* - `custom-css`: only the custom CSS.
13371336
* @param string[] $origins A list of origins to include. By default it includes VALID_ORIGINS.
13381337
* @param array $options {
@@ -1341,7 +1340,6 @@ public function get_settings() {
13411340
* @type string $scope Makes sure all style are scoped to a given selector
13421341
* @type string $root_selector Overwrites and forces a given selector to be used on the root node
13431342
* @type bool $skip_root_layout_styles Omits root layout styles from the generated stylesheet. Default false.
1344-
* @type bool $base_layout_styles When true generates only base layout styles without alignment rules. Default false.
13451343
* @type bool $include_block_style_variations Includes styles for block style variations in the generated stylesheet. Default false.
13461344
* }
13471345
* @return string The resulting stylesheet.
@@ -1397,9 +1395,45 @@ public function get_stylesheet( $types = array( 'variables', 'styles', 'presets'
13971395

13981396
if ( in_array( 'styles', $types, true ) ) {
13991397
if ( false !== $root_style_key && empty( $options['skip_root_layout_styles'] ) ) {
1400-
$stylesheet .= $this->get_root_layout_rules( $style_nodes[ $root_style_key ]['selector'], $style_nodes[ $root_style_key ], $options );
1398+
$stylesheet .= $this->get_root_layout_rules( $style_nodes[ $root_style_key ]['selector'], $style_nodes[ $root_style_key ] );
14011399
}
14021400
$stylesheet .= $this->get_block_classes( $style_nodes );
1401+
} elseif ( in_array( 'base-layout-styles', $types, true ) ) {
1402+
$root_selector = static::ROOT_BLOCK_SELECTOR;
1403+
$columns_selector = '.wp-block-columns';
1404+
$post_template_selector = '.wp-block-post-template';
1405+
if ( ! empty( $options['scope'] ) ) {
1406+
$root_selector = static::scope_selector( $options['scope'], $root_selector );
1407+
$columns_selector = static::scope_selector( $options['scope'], $columns_selector );
1408+
$post_template_selector = static::scope_selector( $options['scope'], $post_template_selector );
1409+
}
1410+
if ( ! empty( $options['root_selector'] ) ) {
1411+
$root_selector = $options['root_selector'];
1412+
}
1413+
/*
1414+
* Base layout styles are provided as part of `styles`, so only output separately if explicitly requested.
1415+
* For backwards compatibility, the Columns block is explicitly included, to support a different default gap value.
1416+
*/
1417+
$base_styles_nodes = array(
1418+
array(
1419+
'path' => array( 'styles' ),
1420+
'selector' => $root_selector,
1421+
),
1422+
array(
1423+
'path' => array( 'styles', 'blocks', 'core/columns' ),
1424+
'selector' => $columns_selector,
1425+
'name' => 'core/columns',
1426+
),
1427+
array(
1428+
'path' => array( 'styles', 'blocks', 'core/post-template' ),
1429+
'selector' => $post_template_selector,
1430+
'name' => 'core/post-template',
1431+
),
1432+
);
1433+
1434+
foreach ( $base_styles_nodes as $base_style_node ) {
1435+
$stylesheet .= $this->get_layout_styles( $base_style_node, $types );
1436+
}
14031437
}
14041438

14051439
if ( in_array( 'presets', $types, true ) ) {
@@ -1590,13 +1624,12 @@ protected function get_block_classes( $style_nodes ) {
15901624
* @since 6.5.1 Only output rules referencing content and wide sizes when values exist.
15911625
* @since 6.5.3 Add types parameter to check if only base layout styles are needed.
15921626
* @since 6.6.0 Updated layout style specificity to be compatible with overall 0-1-0 specificity in global styles.
1593-
* @since 7.0.0 Replaced `$types` parameter with `$options` array; base layout styles controlled via `base_layout_styles` option.
15941627
*
15951628
* @param array $block_metadata Metadata about the block to get styles for.
1596-
* @param array $options Optional. An array of options for now used for internal purposes only.
1629+
* @param array $types Optional. Types of styles to output. If empty, all styles will be output.
15971630
* @return string Layout styles for the block.
15981631
*/
1599-
protected function get_layout_styles( $block_metadata, $options = array() ) {
1632+
protected function get_layout_styles( $block_metadata, $types = array() ) {
16001633
$block_rules = '';
16011634
$block_type = null;
16021635

@@ -1744,9 +1777,8 @@ protected function get_layout_styles( $block_metadata, $options = array() ) {
17441777
foreach ( $base_style_rules as $base_style_rule ) {
17451778
$declarations = array();
17461779

1747-
// Skip outputting base styles for flow and constrained layout types when base_layout_styles is enabled.
1748-
// These themes don't use .wp-site-blocks wrapper, so these layout-specific alignment styles aren't needed.
1749-
if ( ! empty( $options['base_layout_styles'] ) && ( 'default' === $layout_definition['name'] || 'constrained' === $layout_definition['name'] ) ) {
1780+
// Skip outputting base styles for flow and constrained layout types if theme doesn't support theme.json. The 'base-layout-styles' type flags this.
1781+
if ( in_array( 'base-layout-styles', $types, true ) && ( 'default' === $layout_definition['name'] || 'constrained' === $layout_definition['name'] ) ) {
17501782
continue;
17511783
}
17521784

@@ -3023,14 +3055,12 @@ static function ( $pseudo_selector ) use ( $selector ) {
30233055
* @since 6.1.0
30243056
* @since 6.6.0 Use `ROOT_CSS_PROPERTIES_SELECTOR` for CSS custom properties and improved consistency of root padding rules.
30253057
* Updated specificity of body margin reset and first/last child selectors.
3026-
* @since 7.0.0 Added `$options` parameter to control alignment styles output for classic themes.
30273058
*
30283059
* @param string $selector The root node selector.
30293060
* @param array $block_metadata The metadata for the root block.
3030-
* @param array $options Optional. An array of options for now used for internal purposes only.
30313061
* @return string The additional root rules CSS.
30323062
*/
3033-
public function get_root_layout_rules( $selector, $block_metadata, $options = array() ) {
3063+
public function get_root_layout_rules( $selector, $block_metadata ) {
30343064
$css = '';
30353065
$settings = $this->theme_json['settings'] ?? array();
30363066
$use_root_padding = isset( $this->theme_json['settings']['useRootPaddingAwareAlignments'] ) && true === $this->theme_json['settings']['useRootPaddingAwareAlignments'];
@@ -3071,13 +3101,9 @@ public function get_root_layout_rules( $selector, $block_metadata, $options = ar
30713101
$css .= '.has-global-padding :where(:not(.alignfull.is-layout-flow) > .has-global-padding:not(.wp-block-block, .alignfull)) > .alignfull { margin-left: 0; margin-right: 0; }';
30723102
}
30733103

3074-
// Skip outputting alignment styles when base_layout_styles is enabled.
3075-
// These styles target .wp-site-blocks which is only used by block themes.
3076-
if ( empty( $options['base_layout_styles'] ) ) {
3077-
$css .= '.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }';
3078-
$css .= '.wp-site-blocks > .alignright { float: right; margin-left: 2em; }';
3079-
$css .= '.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }';
3080-
}
3104+
$css .= '.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }';
3105+
$css .= '.wp-site-blocks > .alignright { float: right; margin-left: 2em; }';
3106+
$css .= '.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }';
30813107

30823108
// Block gap styles will be output unless explicitly set to `null`. See static::PROTECTED_PROPERTIES.
30833109
if ( isset( $this->theme_json['settings']['spacing']['blockGap'] ) ) {
@@ -3089,7 +3115,7 @@ public function get_root_layout_rules( $selector, $block_metadata, $options = ar
30893115
// For backwards compatibility, ensure the legacy block gap CSS variable is still available.
30903116
$css .= static::ROOT_CSS_PROPERTIES_SELECTOR . " { --wp--style--block-gap: $block_gap_value; }";
30913117
}
3092-
$css .= $this->get_layout_styles( $block_metadata, $options );
3118+
$css .= $this->get_layout_styles( $block_metadata );
30933119

30943120
return $css;
30953121
}

src/wp-includes/global-styles-and-settings.php

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,10 @@ function wp_get_global_settings( $path = array(), $context = array() ) {
3939
* for clearing the cache appropriately.
4040
*/
4141
$origin = 'custom';
42-
if ( isset( $context['origin'] ) && 'base' === $context['origin'] ) {
42+
if (
43+
! wp_theme_has_theme_json() ||
44+
( isset( $context['origin'] ) && 'base' === $context['origin'] )
45+
) {
4346
$origin = 'theme';
4447
}
4548

@@ -137,12 +140,12 @@ function wp_get_global_styles( $path = array(), $context = array() ) {
137140
* @since 5.9.0
138141
* @since 6.1.0 Added 'base-layout-styles' support.
139142
* @since 6.6.0 Resolves relative paths in theme.json styles to theme absolute paths.
140-
* @since 7.0.0 Deprecated 'base-layout-styles' type; classic themes now receive full styles
141-
* with layout-specific alignment rules skipped via `base_layout_styles` option.
142143
*
143144
* @param array $types Optional. Types of styles to load.
144145
* See {@see 'WP_Theme_JSON::get_stylesheet'} for all valid types.
145-
* If empty, will load: 'variables', 'presets', 'styles'.
146+
* If empty, it'll load the following:
147+
* - for themes without theme.json: 'variables', 'presets', 'base-layout-styles'.
148+
* - for themes with theme.json: 'variables', 'presets', 'styles'.
146149
* @return string Stylesheet.
147150
*/
148151
function wp_get_global_stylesheet( $types = array() ) {
@@ -177,21 +180,15 @@ function wp_get_global_stylesheet( $types = array() ) {
177180
}
178181
}
179182

180-
$tree = WP_Theme_JSON_Resolver::resolve_theme_file_uris( WP_Theme_JSON_Resolver::get_merged_data() );
183+
$tree = WP_Theme_JSON_Resolver::resolve_theme_file_uris( WP_Theme_JSON_Resolver::get_merged_data() );
184+
$supports_theme_json = wp_theme_has_theme_json();
181185

182-
if ( empty( $types ) ) {
186+
if ( empty( $types ) && ! $supports_theme_json ) {
187+
$types = array( 'variables', 'presets', 'base-layout-styles' );
188+
} elseif ( empty( $types ) ) {
183189
$types = array( 'variables', 'styles', 'presets' );
184190
}
185191

186-
/*
187-
* Enable base layout styles only mode for classic themes without theme.json.
188-
* This skips alignment styles that target .wp-site-blocks which is only used by block themes.
189-
*/
190-
$options = array();
191-
if ( ! wp_is_block_theme() && ! wp_theme_has_theme_json() ) {
192-
$options['base_layout_styles'] = true;
193-
}
194-
195192
/*
196193
* If variables are part of the stylesheet, then add them.
197194
* This is so themes without a theme.json still work as before 5.9:
@@ -207,7 +204,7 @@ function wp_get_global_stylesheet( $types = array() ) {
207204
* @see wp_add_global_styles_for_blocks
208205
*/
209206
$origins = array( 'default', 'theme', 'custom' );
210-
$styles_variables = $tree->get_stylesheet( array( 'variables' ), $origins, $options );
207+
$styles_variables = $tree->get_stylesheet( array( 'variables' ), $origins );
211208
$types = array_diff( $types, array( 'variables' ) );
212209
}
213210

@@ -225,8 +222,17 @@ function wp_get_global_stylesheet( $types = array() ) {
225222
* (i.e. in the render cycle). Here, only the ones in use are rendered.
226223
* @see wp_add_global_styles_for_blocks
227224
*/
228-
$origins = array( 'default', 'theme', 'custom' );
229-
$styles_rest = $tree->get_stylesheet( $types, $origins, $options );
225+
$origins = array( 'default', 'theme', 'custom' );
226+
/*
227+
* If the theme doesn't have theme.json but supports both appearance tools and color palette,
228+
* the 'theme' origin should be included so color palette presets are also output.
229+
*/
230+
if ( ! $supports_theme_json && ( current_theme_supports( 'appearance-tools' ) || current_theme_supports( 'border' ) ) && current_theme_supports( 'editor-color-palette' ) ) {
231+
$origins = array( 'default', 'theme' );
232+
} elseif ( ! $supports_theme_json ) {
233+
$origins = array( 'default' );
234+
}
235+
$styles_rest = $tree->get_stylesheet( $types, $origins );
230236
}
231237

232238
$stylesheet = $styles_variables . $styles_rest;

src/wp-includes/script-loader.php

Lines changed: 29 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2514,36 +2514,38 @@ function wp_enqueue_global_styles() {
25142514

25152515
$stylesheet = wp_get_global_stylesheet();
25162516

2517-
/*
2518-
* Dequeue the Customizer's custom CSS
2519-
* and add it before the global styles custom CSS.
2520-
*/
2521-
remove_action( 'wp_head', 'wp_custom_css_cb', 101 );
2517+
if ( $is_block_theme ) {
2518+
/*
2519+
* Dequeue the Customizer's custom CSS
2520+
* and add it before the global styles custom CSS.
2521+
*/
2522+
remove_action( 'wp_head', 'wp_custom_css_cb', 101 );
25222523

2523-
/*
2524-
* Get the custom CSS from the Customizer and add it to the global stylesheet.
2525-
* Always do this in Customizer preview for the sake of live preview since it be empty.
2526-
*/
2527-
$custom_css = trim( wp_get_custom_css() );
2528-
if ( $custom_css || is_customize_preview() ) {
2529-
if ( is_customize_preview() ) {
2530-
/*
2531-
* When in the Customizer preview, wrap the Custom CSS in milestone comments to allow customize-preview.js
2532-
* to locate the CSS to replace for live previewing. Make sure that the milestone comments are omitted from
2533-
* the stored Custom CSS if by chance someone tried to add them, which would be highly unlikely, but it
2534-
* would break live previewing.
2535-
*/
2536-
$before_milestone = '/*BEGIN_CUSTOMIZER_CUSTOM_CSS*/';
2537-
$after_milestone = '/*END_CUSTOMIZER_CUSTOM_CSS*/';
2538-
$custom_css = str_replace( array( $before_milestone, $after_milestone ), '', $custom_css );
2539-
$custom_css = $before_milestone . "\n" . $custom_css . "\n" . $after_milestone;
2524+
/*
2525+
* Get the custom CSS from the Customizer and add it to the global stylesheet.
2526+
* Always do this in Customizer preview for the sake of live preview since it be empty.
2527+
*/
2528+
$custom_css = trim( wp_get_custom_css() );
2529+
if ( $custom_css || is_customize_preview() ) {
2530+
if ( is_customize_preview() ) {
2531+
/*
2532+
* When in the Customizer preview, wrap the Custom CSS in milestone comments to allow customize-preview.js
2533+
* to locate the CSS to replace for live previewing. Make sure that the milestone comments are omitted from
2534+
* the stored Custom CSS if by chance someone tried to add them, which would be highly unlikely, but it
2535+
* would break live previewing.
2536+
*/
2537+
$before_milestone = '/*BEGIN_CUSTOMIZER_CUSTOM_CSS*/';
2538+
$after_milestone = '/*END_CUSTOMIZER_CUSTOM_CSS*/';
2539+
$custom_css = str_replace( array( $before_milestone, $after_milestone ), '', $custom_css );
2540+
$custom_css = $before_milestone . "\n" . $custom_css . "\n" . $after_milestone;
2541+
}
2542+
$custom_css = "\n" . $custom_css;
25402543
}
2541-
$custom_css = "\n" . $custom_css;
2542-
}
2543-
$stylesheet .= $custom_css;
2544+
$stylesheet .= $custom_css;
25442545

2545-
// Add the global styles custom CSS at the end.
2546-
$stylesheet .= wp_get_global_stylesheet( array( 'custom-css' ) );
2546+
// Add the global styles custom CSS at the end.
2547+
$stylesheet .= wp_get_global_stylesheet( array( 'custom-css' ) );
2548+
}
25472549

25482550
if ( empty( $stylesheet ) ) {
25492551
return;

tests/phpunit/tests/template.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1561,6 +1561,7 @@ static function () {
15611561
'global-styles-inline-css',
15621562
'normal-css',
15631563
'normal-inline-css',
1564+
'wp-custom-css',
15641565
),
15651566
'BODY' => array(
15661567
'late-css',
@@ -1622,6 +1623,7 @@ function (): void {
16221623
'global-styles-inline-css',
16231624
'normal-css',
16241625
'normal-inline-css',
1626+
'wp-custom-css',
16251627
),
16261628
'BODY' => array(
16271629
'late-css',

0 commit comments

Comments
 (0)