Changeset 58025
- Timestamp:
- 04/19/2024 05:57:43 PM (8 months ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/wp-includes/class-wp-theme.php
r57847 r58025 1973 1973 * 1974 1974 * @since 6.4.0 1975 * @since 6.6.0 Uses transients to cache regardless of site environment. 1975 1976 * 1976 1977 * @return array|false Returns an array of patterns if cache is found, otherwise false. … … 1980 1981 return false; 1981 1982 } 1982 $pattern_data = wp_cache_get( 'wp_theme_patterns_' . $this->stylesheet, 'theme_files' ); 1983 1984 $pattern_data = get_site_transient( 'wp_theme_files_patterns-' . $this->cache_hash ); 1985 1983 1986 if ( is_array( $pattern_data ) && $pattern_data['version'] === $this->get( 'Version' ) ) { 1984 1987 return $pattern_data['patterns']; … … 1991 1994 * 1992 1995 * @since 6.4.0 1996 * @since 6.6.0 Uses transients to cache regardless of site environment. 1993 1997 * 1994 1998 * @param array $patterns Block patterns data to set in cache. … … 1999 2003 'patterns' => $patterns, 2000 2004 ); 2001 wp_cache_set( 'wp_theme_patterns_' . $this->stylesheet, $pattern_data, 'theme_files' ); 2005 2006 /** 2007 * Filters the cache expiration time for theme files. 2008 * 2009 * @since 6.6.0 2010 * 2011 * @param int $cache_expiration Cache expiration time in seconds. 2012 * @param string $cache_type Type of cache being set. 2013 */ 2014 $cache_expiration = (int) apply_filters( 'wp_theme_files_cache_ttl', self::$cache_expiration, 'theme_block_patterns' ); 2015 2016 // We don't want to cache patterns infinitely. 2017 if ( $cache_expiration <= 0 ) { 2018 _doing_it_wrong( 2019 __METHOD__, 2020 sprintf( 2021 /* translators: %1$s: The filter name.*/ 2022 __( 'The %1$s filter must return an integer value greater than 0.' ), 2023 '<code>wp_theme_files_cache_ttl</code>' 2024 ), 2025 '6.6.0' 2026 ); 2027 2028 $cache_expiration = self::$cache_expiration; 2029 } 2030 2031 set_site_transient( 'wp_theme_files_patterns-' . $this->cache_hash, $pattern_data, $cache_expiration ); 2002 2032 } 2003 2033 … … 2006 2036 * 2007 2037 * @since 6.4.0 2038 * @since 6.6.0 Uses transients to cache regardless of site environment. 2008 2039 */ 2009 2040 public function delete_pattern_cache() { 2010 wp_cache_delete( 'wp_theme_patterns_' . $this->stylesheet, 'theme_files');2041 delete_site_transient( 'wp_theme_files_patterns-' . $this->cache_hash ); 2011 2042 } 2012 2043 -
trunk/tests/phpunit/tests/theme/wpThemeGetBlockPatterns.php
r57608 r58025 13 13 */ 14 14 class Tests_Theme_WPThemeGetBlockPatterns extends WP_UnitTestCase { 15 /** 16 * The initial cache object. 17 * 18 * @var object 19 */ 20 private $initial_cache_object; 21 22 public function set_up() { 23 parent::set_up(); 24 25 $this->initial_cache_object = wp_using_ext_object_cache(); 26 } 27 28 public function tear_down() { 29 wp_using_ext_object_cache( $this->initial_cache_object ); 30 parent::tear_down(); 31 } 15 32 16 33 public static function wpSetUpBeforeClass() { … … 38 55 39 56 return $pattern_cache; 57 } 58 59 /** 60 * Test helper to access the private cache_hash propery of a theme. 61 * 62 * @param WP_Theme $wp_theme A WP_Theme object. 63 * @return array|false Returns an array of patterns if cache is found, otherwise false. 64 */ 65 private function get_cache_hash( $wp_theme ) { 66 $reflection = new ReflectionProperty( get_class( $wp_theme ), 'cache_hash' ); 67 $reflection->setAccessible( true ); 68 $cache_hash = $reflection->getValue( $wp_theme ); 69 $reflection->setAccessible( false ); 70 return $cache_hash; 40 71 } 41 72 … … 197 228 ); 198 229 } 230 231 /** 232 * @ticket 59600 233 * 234 * @covers WP_Theme::delete_pattern_cache 235 */ 236 public function test_delete_pattern_cache_non_obj_cache() { 237 // Ensure object cache is disabled. 238 wp_using_ext_object_cache( false ); 239 240 $theme = wp_get_theme( 'block-theme-patterns' ); 241 242 $this->assertTrue( $theme->exists(), 'The test theme could not be found.' ); 243 244 $theme->get_block_patterns(); 245 246 $this->assertSameSets( 247 array( 248 'cta.php' => array( 249 'title' => 'Centered Call To Action', 250 'slug' => 'block-theme-patterns/cta', 251 'description' => '', 252 'categories' => array( 'call-to-action' ), 253 ), 254 ), 255 $this->get_pattern_cache( $theme ), 256 'The cache for block theme patterns should match the expected.' 257 ); 258 $theme->delete_pattern_cache(); 259 $this->assertFalse( 260 $this->get_pattern_cache( $theme ), 261 'The cache for block theme patterns should have been cleared.' 262 ); 263 } 264 265 /** 266 * Check if the pattern cache is stored in transient if object cache is not present. 267 * 268 * @ticket 59600 269 */ 270 public function test_pattern_transient_cache_for_non_cache_site() { 271 // Ensure object cache is disabled. 272 wp_using_ext_object_cache( false ); 273 274 $theme = wp_get_theme( 'block-theme-patterns' ); 275 $theme->get_block_patterns(); 276 277 $transient_key = 'wp_theme_files_patterns-' . $this->get_cache_hash( $theme ); 278 $transient_value = get_site_transient( $transient_key ); 279 280 $this->assertSameSets( 281 array( 282 'cta.php' => array( 283 'title' => 'Centered Call To Action', 284 'slug' => 'block-theme-patterns/cta', 285 'description' => '', 286 'categories' => array( 'call-to-action' ), 287 ), 288 ), 289 $transient_value['patterns'], 290 'The transient value should match the expected.' 291 ); 292 293 $this->assertNotEmpty( 294 $this->get_pattern_cache( $theme ), 295 'The cache for block theme patterns is empty.' 296 ); 297 } 199 298 }
Note: See TracChangeset
for help on using the changeset viewer.