Make WordPress Core

Changeset 58422

Timestamp:
06/17/2024 09:42:57 AM (6 weeks ago)
Author:
oandregal
Message:

Global styles: prevent duplicate CSS for block style variations.

Props aaronrobertshaw, mukesh27, ramonopoly, isabel_brison, oandregal.
Fixes #61443.

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/block-supports/block-style-variations.php

    r58413 r58422  
    137137        array( 'custom' ),
    138138        array(
    139             'skip_root_layout_styles' => true,
    140             'scope'                   => ".$class_name",
     139            'include_block_style_variations' => true,
     140            'skip_root_layout_styles'        => true,
     141            'scope'                          => ".$class_name",
    141142        )
    142143    );
  • trunk/src/wp-includes/class-wp-theme-json.php

    r58421 r58422  
    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' => ::LATEST_SCHEMA ), $origin = 'theme' ) {
    754754        if ( ! in_array( $origin, static::VALID_ORIGINS, true ) ) {
    755755            $origin = 'theme';
     
    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:
     
    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.
     
    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 );
    12851287        $setting_nodes   = static::get_setting_nodes( $this->theme_json, $blocks_metadata );
    12861288
     
    24472449     *
    24482450     * @since 5.8.0
     2451
    24492452     *
    24502453     * @param array $theme_json The tree to extract style nodes from.
    24512454     * @param array $selectors  List of selectors per block.
     2455
     2456
     2457
     2458
     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() ) {
    24552463        $nodes = array();
    24562464        if ( ! isset( $theme_json['styles'] ) ) {
     
    24942502        }
    24952503
    2496         $block_nodes = static::get_block_nodes( $theme_json );
     2504        $block_nodes = static::get_block_nodes( $theme_json );
    24972505        foreach ( $block_nodes as $block_node ) {
    24982506            $nodes[] = $block_node;
     
    25652573     * @since 6.1.0
    25662574     * @since 6.3.0 Refactored and stabilized selectors API.
     2575
    25672576     *
    25682577     * @param array $theme_json The theme.json converted to an array.
     2578
     2579
     2580
     2581
     2582
     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 ) {
     2587        $selectors = ;
    25732588        $nodes     = array();
    25742589        if ( ! isset( $theme_json['styles'] ) ) {
     
    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(
     
    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 ) {
  • trunk/tests/phpunit/tests/theme/wpThemeJson.php

    r58378 r58422  
    55015501        $this->assertEquals( $expected, $actual );
    55025502    }
     5503
     5504
     5505
     5506
     5507
     5508
     5509
     5510
     5511
     5512
     5513
     5514
     5515
     5516
     5517
     5518
     5519
     5520
     5521
     5522
     5523
     5524
     5525
     5526
     5527
     5528
     5529
     5530
     5531
     5532
     5533
     5534
     5535
     5536
     5537
     5538
     5539
     5540
     5541
     5542
     5543
     5544
     5545
     5546
     5547
     5548
     5549
     5550
     5551
     5552
     5553
     5554
     5555
     5556
     5557
     5558
     5559
     5560
     5561
     5562
     5563
     5564
     5565
     5566
     5567
     5568
     5569
     5570
     5571
     5572
     5573
     5574
     5575
     5576
     5577
     5578
     5579
     5580
     5581
     5582
     5583
    55035584}
Note: See TracChangeset for help on using the changeset viewer.