@@ -1326,12 +1326,13 @@ 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.
13291330 *
13301331 * @param string[] $types Types of styles to load. Will load all by default. It accepts:
13311332 * - `variables`: only the CSS Custom Properties for presets & custom ones.
13321333 * - `styles`: only the styles section in theme.json.
13331334 * - `presets`: only the classes for the presets.
1334- * - `base-layout-styles`: only the base layout styles.
1335+ * - `base-layout-styles`: only the base layout styles. Deprecated in 7.0.0.
13351336 * - `custom-css`: only the custom CSS.
13361337 * @param string[] $origins A list of origins to include. By default it includes VALID_ORIGINS.
13371338 * @param array $options {
@@ -1340,6 +1341,7 @@ public function get_settings() {
13401341 * @type string $scope Makes sure all style are scoped to a given selector
13411342 * @type string $root_selector Overwrites and forces a given selector to be used on the root node
13421343 * @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.
13431345 * @type bool $include_block_style_variations Includes styles for block style variations in the generated stylesheet. Default false.
13441346 * }
13451347 * @return string The resulting stylesheet.
@@ -1395,45 +1397,9 @@ public function get_stylesheet( $types = array( 'variables', 'styles', 'presets'
13951397
13961398 if ( in_array ( 'styles ' , $ types , true ) ) {
13971399 if ( false !== $ root_style_key && empty ( $ options ['skip_root_layout_styles ' ] ) ) {
1398- $ stylesheet .= $ this ->get_root_layout_rules ( $ style_nodes [ $ root_style_key ]['selector ' ], $ style_nodes [ $ root_style_key ] );
1400+ $ stylesheet .= $ this ->get_root_layout_rules ( $ style_nodes [ $ root_style_key ]['selector ' ], $ style_nodes [ $ root_style_key ], $ options );
13991401 }
14001402 $ 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- }
14371403 }
14381404
14391405 if ( in_array ( 'presets ' , $ types , true ) ) {
@@ -1624,12 +1590,13 @@ protected function get_block_classes( $style_nodes ) {
16241590 * @since 6.5.1 Only output rules referencing content and wide sizes when values exist.
16251591 * @since 6.5.3 Add types parameter to check if only base layout styles are needed.
16261592 * @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.
16271594 *
16281595 * @param array $block_metadata Metadata about the block to get styles for.
1629- * @param array $types Optional. Types of styles to output. If empty, all styles will be output .
1596+ * @param array $options Optional. An array of options for now used for internal purposes only .
16301597 * @return string Layout styles for the block.
16311598 */
1632- protected function get_layout_styles ( $ block_metadata , $ types = array () ) {
1599+ protected function get_layout_styles ( $ block_metadata , $ options = array () ) {
16331600 $ block_rules = '' ;
16341601 $ block_type = null ;
16351602
@@ -1777,8 +1744,9 @@ protected function get_layout_styles( $block_metadata, $types = array() ) {
17771744 foreach ( $ base_style_rules as $ base_style_rule ) {
17781745 $ declarations = array ();
17791746
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 ' ] ) ) {
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 ' ] ) ) {
17821750 continue ;
17831751 }
17841752
@@ -3055,12 +3023,14 @@ static function ( $pseudo_selector ) use ( $selector ) {
30553023 * @since 6.1.0
30563024 * @since 6.6.0 Use `ROOT_CSS_PROPERTIES_SELECTOR` for CSS custom properties and improved consistency of root padding rules.
30573025 * 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.
30583027 *
30593028 * @param string $selector The root node selector.
30603029 * @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.
30613031 * @return string The additional root rules CSS.
30623032 */
3063- public function get_root_layout_rules ( $ selector , $ block_metadata ) {
3033+ public function get_root_layout_rules ( $ selector , $ block_metadata, $ options = array () ) {
30643034 $ css = '' ;
30653035 $ settings = $ this ->theme_json ['settings ' ] ?? array ();
30663036 $ use_root_padding = isset ( $ this ->theme_json ['settings ' ]['useRootPaddingAwareAlignments ' ] ) && true === $ this ->theme_json ['settings ' ]['useRootPaddingAwareAlignments ' ];
@@ -3101,9 +3071,13 @@ public function get_root_layout_rules( $selector, $block_metadata ) {
31013071 $ 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; } ' ;
31023072 }
31033073
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; } ' ;
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+ }
31073081
31083082 // Block gap styles will be output unless explicitly set to `null`. See static::PROTECTED_PROPERTIES.
31093083 if ( isset ( $ this ->theme_json ['settings ' ]['spacing ' ]['blockGap ' ] ) ) {
@@ -3115,7 +3089,7 @@ public function get_root_layout_rules( $selector, $block_metadata ) {
31153089 // For backwards compatibility, ensure the legacy block gap CSS variable is still available.
31163090 $ css .= static ::ROOT_CSS_PROPERTIES_SELECTOR . " { --wp--style--block-gap: $ block_gap_value; } " ;
31173091 }
3118- $ css .= $ this ->get_layout_styles ( $ block_metadata );
3092+ $ css .= $ this ->get_layout_styles ( $ block_metadata, $ options );
31193093
31203094 return $ css ;
31213095 }
0 commit comments