Make WordPress Core

Changeset 58711


Ignore:
Timestamp:
07/12/2024 07:59:34 PM (5 months ago)
Author:
joemcgill
Message:

Editor: Revert caching of global styles for blocks.

This reverts [58334] to fix a bug where edits to block styles made in the site editor were not showing in the front end.

Reviewed by hellofromtonya.
Merges [58710] to the 6.6 branch.

Props joemcgill, spacedmonkey, andrewserong, hellofromtonya, audrasjb.
See #59595.

Location:
branches/6.6
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/6.6

  • branches/6.6/src/wp-includes/global-styles-and-settings.php

    r58334 r58711  
    308308    $tree        = WP_Theme_JSON_Resolver::get_merged_data();
    309309    $block_nodes = $tree->get_styles_block_nodes();
    310 
    311     $can_use_cached = ! wp_is_development_mode( 'theme' );
    312     if ( $can_use_cached ) {
    313         // Hash global settings and block nodes together to optimize performance of key generation.
    314         $hash = md5(
    315             wp_json_encode(
    316                 array(
    317                     'global_setting' => wp_get_global_settings(),
    318                     'block_nodes'    => $block_nodes,
    319                 )
    320             )
    321         );
    322 
    323         $cache_key = "wp_styles_for_blocks:$hash";
    324         $cached    = get_site_transient( $cache_key );
    325         if ( ! is_array( $cached ) ) {
    326             $cached = array();
    327         }
    328     }
    329 
    330     $update_cache = false;
    331 
    332310    foreach ( $block_nodes as $metadata ) {
    333 
    334         if ( $can_use_cached ) {
    335             // Use the block name as the key for cached CSS data. Otherwise, use a hash of the metadata.
    336             $cache_node_key = isset( $metadata['name'] ) ? $metadata['name'] : md5( wp_json_encode( $metadata ) );
    337 
    338             if ( isset( $cached[ $cache_node_key ] ) ) {
    339                 $block_css = $cached[ $cache_node_key ];
    340             } else {
    341                 $block_css                 = $tree->get_styles_for_block( $metadata );
    342                 $cached[ $cache_node_key ] = $block_css;
    343                 $update_cache              = true;
    344             }
    345         } else {
    346             $block_css = $tree->get_styles_for_block( $metadata );
    347         }
     311        $block_css = $tree->get_styles_for_block( $metadata );
    348312
    349313        if ( ! wp_should_load_separate_core_block_assets() ) {
     
    391355        }
    392356    }
    393 
    394     if ( $update_cache ) {
    395         set_site_transient( $cache_key, $cached, HOUR_IN_SECONDS );
    396     }
    397357}
    398358
  • branches/6.6/tests/phpunit/tests/theme/wpAddGlobalStylesForBlocks.php

    r58334 r58711  
    7777
    7878    /**
    79      * Ensure that the block cache is set for global styles.
    80      *
    81      * @ticket 59595
    82      */
    83     public function test_styles_for_blocks_cache_is_set() {
    84         $this->set_up_third_party_block();
    85 
    86         wp_register_style( 'global-styles', false, array(), true, true );
    87 
    88         $cache_key                = $this->get_wp_styles_for_blocks_cache_key();
    89         $styles_for_blocks_before = get_site_transient( $cache_key );
    90         $this->assertFalse( $styles_for_blocks_before );
    91 
    92         wp_add_global_styles_for_blocks();
    93 
    94         $styles_for_blocks_after = get_site_transient( $cache_key );
    95         $this->assertNotEmpty( $styles_for_blocks_after );
    96     }
    97 
    98     /**
    99      * Confirm that the block cache is skipped when in dev mode for themes.
    100      *
    101      * @ticket 59595
    102      */
    103     public function test_styles_for_blocks_skips_cache_in_dev_mode() {
    104         global $_wp_tests_development_mode;
    105 
    106         $orig_dev_mode = $_wp_tests_development_mode;
    107 
    108         // Setting development mode to theme should skip the cache.
    109         $_wp_tests_development_mode = 'theme';
    110 
    111         wp_register_style( 'global-styles', false, array(), true, true );
    112 
    113         // Initial register of global styles.
    114         wp_add_global_styles_for_blocks();
    115 
    116         $cache_key                 = $this->get_wp_styles_for_blocks_cache_key();
    117         $styles_for_blocks_initial = get_site_transient( $cache_key );
    118 
    119         // Cleanup.
    120         $_wp_tests_development_mode = $orig_dev_mode;
    121 
    122         $this->assertFalse( $styles_for_blocks_initial );
    123     }
    124 
    125     /**
    126      * Confirm that the block cache is updated if the block meta has changed.
    127      *
    128      * @ticket 59595
    129      */
    130     public function test_styles_for_blocks_cache_is_skipped() {
    131         wp_register_style( 'global-styles', false, array(), true, true );
    132 
    133         // Initial register of global styles.
    134         wp_add_global_styles_for_blocks();
    135 
    136         $cache_key                 = $this->get_wp_styles_for_blocks_cache_key();
    137         $styles_for_blocks_initial = get_site_transient( $cache_key );
    138         $this->assertNotEmpty( $styles_for_blocks_initial, 'Initial cache was not set.' );
    139 
    140         $this->set_up_third_party_block();
    141 
    142         /*
    143          * Call register of global styles again to ensure the cache is updated.
    144          * In normal conditions, this function is only called once per request.
    145          */
    146         wp_add_global_styles_for_blocks();
    147 
    148         $cache_key                 = $this->get_wp_styles_for_blocks_cache_key();
    149         $styles_for_blocks_updated = get_site_transient( $cache_key );
    150         $this->assertNotEmpty( $styles_for_blocks_updated, 'Updated cache was not set.' );
    151 
    152         $this->assertNotEquals(
    153             $styles_for_blocks_initial,
    154             $styles_for_blocks_updated,
    155             'Block style cache was not updated.'
    156         );
    157     }
    158 
    159     /**
    16079     * @ticket 56915
    16180     * @ticket 61165
     
    335254        return is_array( $actual ) ? $actual : array();
    336255    }
    337 
    338     /**
    339      * Get cache key for `wp_styles_for_blocks`.
    340      *
    341      * @return string The cache key.
    342      */
    343     private function get_wp_styles_for_blocks_cache_key() {
    344         $tree        = WP_Theme_JSON_Resolver::get_merged_data();
    345         $block_nodes = $tree->get_styles_block_nodes();
    346         // md5 is a costly operation, so we hashing global settings and block_node in a single call.
    347         $hash = md5(
    348             wp_json_encode(
    349                 array(
    350                     'global_setting' => wp_get_global_settings(),
    351                     'block_nodes'    => $block_nodes,
    352                 )
    353             )
    354         );
    355 
    356         return "wp_styles_for_blocks:$hash";
    357     }
    358256}
Note: See TracChangeset for help on using the changeset viewer.