Make WordPress Core

Ticket #54910: 54910_wp_theme_cache.diff

File 54910_wp_theme_cache.diff, 2.2 KB (added by costdev, 2 years ago)

Use WP_Theme::cache_get()/add() and add the is_block_theme to the keys to delete in WP_Theme::cache_delete().

  • src/wp-includes/class-wp-theme.php

    diff --git a/src/wp-includes/class-wp-theme.php b/src/wp-includes/class-wp-theme.php
    index 9fa101906a..8f8e332206 100644
    a b final class WP_Theme implements ArrayAccess { 
    739739         * @since 3.4.0
    740740         */
    741741        public function cache_delete() {
    742                 foreach ( array( 'theme', 'screenshot', 'headers', 'post_templates' ) as $key ) {
     742                $keys = array(
     743                        'theme',
     744                        'screenshot',
     745                        'headers',
     746                        'post_templates',
     747                        'is_block_theme',
     748                );
     749
     750                foreach ( $keys as $key ) {
    743751                        wp_cache_delete( $key . '-' . $this->cache_hash, 'themes' );
    744752                }
    745753                $this->template          = null;
    final class WP_Theme implements ArrayAccess { 
    14761484         * @return bool
    14771485         */
    14781486        public function is_block_theme() {
     1487                $is_block_theme = $this->cache_get( 'is_block_theme' );
     1488
     1489                if ( false !== $is_block_theme ) {
     1490                        return (bool) $is_block_theme;
     1491                }
     1492
    14791493                $paths_to_index_block_template = array(
    14801494                        $this->get_file_path( '/block-templates/index.html' ),
    14811495                        $this->get_file_path( '/templates/index.html' ),
    final class WP_Theme implements ArrayAccess { 
    14831497
    14841498                foreach ( $paths_to_index_block_template as $path_to_index_block_template ) {
    14851499                        if ( is_file( $path_to_index_block_template ) && is_readable( $path_to_index_block_template ) ) {
    1486                                 return true;
     1500                                $content = file_get_contents( $path_to_index_block_template );
     1501                                $blocks  = parse_blocks( $content );
     1502
     1503                                if ( $blocks && array_filter( wp_list_pluck( $blocks, 'blockName' ) ) ) {
     1504                                        $this->cache_add( 'is_block_theme', 1 );
     1505                                        return true;
     1506                                }
    14871507                        }
    14881508                }
    14891509
     1510                $this->cache_add( 'is_block_theme', 0 );
     1511
    14901512                return false;
    14911513        }
    14921514
  • src/wp-includes/template.php

    diff --git a/src/wp-includes/template.php b/src/wp-includes/template.php
    index 891e77748d..4d43d69237 100644
    a b function get_query_template( $type, $templates = array() ) { 
    6363
    6464        $template = locate_template( $templates );
    6565
    66         $template = locate_block_template( $template, $type, $templates );
     66        if ( wp_is_block_theme() ) {
     67                $template = locate_block_template( $template, $type, $templates );
     68        }
    6769
    6870        /**
    6971         * Filters the path of the queried template by type.