Make WordPress Core


Ignore:
Timestamp:
04/19/2024 05:57:43 PM (9 months ago)
Author:
joemcgill
Message:

Themes: Cache block theme patterns in a transient.

This extends the benefits of persistent caching added in [56978] for block theme patterns to sites that are not using a persistent object cache. By default, these caches expire using the value of the WP_Theme::cache_expiration property. The transient cache TTL can be overridden using the newly introduced wp_theme_files_cache_ttl filter.

Props thekt12, joemcgill, flixos90, peterwilsoncc, spacedmonkey.
See #59600, #59719.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/class-wp-theme.php

    r57847 r58025  
    19731973     *
    19741974     * @since 6.4.0
     1975     * @since 6.6.0 Uses transients to cache regardless of site environment.
    19751976     *
    19761977     * @return array|false Returns an array of patterns if cache is found, otherwise false.
     
    19801981            return false;
    19811982        }
    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
    19831986        if ( is_array( $pattern_data ) && $pattern_data['version'] === $this->get( 'Version' ) ) {
    19841987            return $pattern_data['patterns'];
     
    19911994     *
    19921995     * @since 6.4.0
     1996     * @since 6.6.0 Uses transients to cache regardless of site environment.
    19931997     *
    19941998     * @param array $patterns Block patterns data to set in cache.
     
    19992003            'patterns' => $patterns,
    20002004        );
    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 );
    20022032    }
    20032033
     
    20062036     *
    20072037     * @since 6.4.0
     2038     * @since 6.6.0 Uses transients to cache regardless of site environment.
    20082039     */
    20092040    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 );
    20112042    }
    20122043
Note: See TracChangeset for help on using the changeset viewer.