diff --git a/wp-includes/class-wp-theme.php b/wp-includes/class-wp-theme.php index f95f49e205..5cf8f9437a 100644 --- a/wp-includes/class-wp-theme.php +++ b/wp-includes/class-wp-theme.php @@ -113,6 +113,14 @@ final class WP_Theme implements ArrayAccess { */ private $headers_sanitized; + /** + * Is this theme a block theme. + * + * @since 6.2.0 + * @var bool + */ + private $block_theme; + /** * Header name from the theme's style.css after being translated. * @@ -250,7 +258,7 @@ final class WP_Theme implements ArrayAccess { $cache = $this->cache_get( 'theme' ); if ( is_array( $cache ) ) { - foreach ( array( 'errors', 'headers', 'template' ) as $key ) { + foreach ( array( 'block_theme', 'errors', 'headers', 'template' ) as $key ) { if ( isset( $cache[ $key ] ) ) { $this->$key = $cache[ $key ]; } @@ -275,14 +283,16 @@ final class WP_Theme implements ArrayAccess { } else { $this->errors = new WP_Error( 'theme_no_stylesheet', __( 'Stylesheet is missing.' ) ); } - $this->template = $this->stylesheet; + $this->template = $this->stylesheet; + $this->block_theme = false; $this->cache_add( 'theme', array( - 'headers' => $this->headers, - 'errors' => $this->errors, - 'stylesheet' => $this->stylesheet, - 'template' => $this->template, + 'block_theme' => $this->block_theme, + 'headers' => $this->headers, + 'errors' => $this->errors, + 'stylesheet' => $this->stylesheet, + 'template' => $this->template, ) ); if ( ! file_exists( $this->theme_root ) ) { // Don't cache this one. @@ -293,13 +303,15 @@ final class WP_Theme implements ArrayAccess { $this->headers['Name'] = $this->stylesheet; $this->errors = new WP_Error( 'theme_stylesheet_not_readable', __( 'Stylesheet is not readable.' ) ); $this->template = $this->stylesheet; + $this->block_theme = false; $this->cache_add( 'theme', array( - 'headers' => $this->headers, - 'errors' => $this->errors, - 'stylesheet' => $this->stylesheet, - 'template' => $this->template, + 'block_theme' => $this->block_theme, + 'headers' => $this->headers, + 'errors' => $this->errors, + 'stylesheet' => $this->stylesheet, + 'template' => $this->template, ) ); return; @@ -327,9 +339,10 @@ final class WP_Theme implements ArrayAccess { $this->cache_add( 'theme', array( - 'headers' => $this->headers, - 'errors' => $this->errors, - 'stylesheet' => $this->stylesheet, + 'block_theme' => $this->is_block_theme(), + 'headers' => $this->headers, + 'errors' => $this->errors, + 'stylesheet' => $this->stylesheet, ) ); @@ -363,10 +376,11 @@ final class WP_Theme implements ArrayAccess { $this->cache_add( 'theme', array( - 'headers' => $this->headers, - 'errors' => $this->errors, - 'stylesheet' => $this->stylesheet, - 'template' => $this->template, + 'block_theme' => $this->is_block_theme(), + 'headers' => $this->headers, + 'errors' => $this->errors, + 'stylesheet' => $this->stylesheet, + 'template' => $this->template, ) ); return; @@ -399,10 +413,11 @@ final class WP_Theme implements ArrayAccess { $this->cache_add( 'theme', array( - 'headers' => $this->headers, - 'errors' => $this->errors, - 'stylesheet' => $this->stylesheet, - 'template' => $this->template, + 'block_theme' => $this->is_block_theme(), + 'headers' => $this->headers, + 'errors' => $this->errors, + 'stylesheet' => $this->stylesheet, + 'template' => $this->template, ) ); $this->parent = new WP_Theme( $this->template, $this->theme_root, $this ); @@ -426,10 +441,11 @@ final class WP_Theme implements ArrayAccess { $_child->cache_add( 'theme', array( - 'headers' => $_child->headers, - 'errors' => $_child->errors, - 'stylesheet' => $_child->stylesheet, - 'template' => $_child->template, + 'block_theme' => $_child->is_block_theme(), + 'headers' => $_child->headers, + 'errors' => $_child->errors, + 'stylesheet' => $_child->stylesheet, + 'template' => $_child->template, ) ); // The two themes actually reference each other with the Template header. @@ -445,10 +461,11 @@ final class WP_Theme implements ArrayAccess { $this->cache_add( 'theme', array( - 'headers' => $this->headers, - 'errors' => $this->errors, - 'stylesheet' => $this->stylesheet, - 'template' => $this->template, + 'block_theme' => $this->is_block_theme(), + 'headers' => $this->headers, + 'errors' => $this->errors, + 'stylesheet' => $this->stylesheet, + 'template' => $this->template, ) ); } @@ -465,10 +482,11 @@ final class WP_Theme implements ArrayAccess { // We're good. If we didn't retrieve from cache, set it. if ( ! is_array( $cache ) ) { $cache = array( - 'headers' => $this->headers, - 'errors' => $this->errors, - 'stylesheet' => $this->stylesheet, - 'template' => $this->template, + 'block_theme' => $this->is_block_theme(), + 'headers' => $this->headers, + 'errors' => $this->errors, + 'stylesheet' => $this->stylesheet, + 'template' => $this->template, ); // If the parent theme is in another root, we'll want to cache this. Avoids an entire branch of filesystem calls above. if ( isset( $theme_root_template ) ) { @@ -762,6 +780,7 @@ final class WP_Theme implements ArrayAccess { $this->errors = null; $this->headers_sanitized = null; $this->name_translated = null; + $this->block_theme = null; $this->headers = array(); $this->__construct( $this->stylesheet, $this->theme_root ); } @@ -1491,18 +1510,25 @@ final class WP_Theme implements ArrayAccess { * @return bool */ public function is_block_theme() { + if ( isset( $this->block_theme ) ) { + return $this->block_theme; + } + $paths_to_index_block_template = array( $this->get_file_path( '/block-templates/index.html' ), $this->get_file_path( '/templates/index.html' ), ); + $this->block_theme = false; + foreach ( $paths_to_index_block_template as $path_to_index_block_template ) { if ( is_file( $path_to_index_block_template ) && is_readable( $path_to_index_block_template ) ) { - return true; + $this->block_theme = true; + break; } } - return false; + return $this->block_theme; } /** diff --git a/wp-includes/version.php b/wp-includes/version.php index 090bc984b7..ef1c0a55bb 100644 --- a/wp-includes/version.php +++ b/wp-includes/version.php @@ -16,7 +16,7 @@ * * @global string $wp_version */ -$wp_version = '6.2-alpha-55235'; +$wp_version = '6.2-alpha-55236'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.