diff --git a/wp-admin/includes/dashboard.php b/wp-admin/includes/dashboard.php index aad170c97c..833a617bc7 100644 --- a/wp-admin/includes/dashboard.php +++ b/wp-admin/includes/dashboard.php @@ -1987,21 +1987,32 @@ function wp_dashboard_empty() {} * Displays a welcome panel to introduce users to WordPress. * * @since 3.3.0 + * @since 5.9.0 Send users to the Site Editor if the current theme is block-based. */ function wp_welcome_panel() { + $customize_url = null; + $can_edit_theme_options = current_user_can( 'edit_theme_options' ); + $can_customize = current_user_can( 'customize' ); + $is_block_based_theme = wp_is_block_template_theme(); + + if ( $is_block_based_theme && $can_edit_theme_options ) { + $customize_url = esc_url( admin_url( 'site-editor.php' ) ); + } elseif ( ! $is_block_based_theme && $can_customize ) { + $customize_url = wp_customize_url(); + } ?>

- +

- + true ) ) ) > 1 ) ) : ?> - +

is_block_based(); + + if ( $is_block_based_theme && $can_edit_theme_options ) { + $customize_action = esc_url( admin_url( 'site-editor.php' ) ); + } elseif ( ! $is_block_based_theme && $can_customize && $can_edit_theme_options ) { $customize_action = esc_url( add_query_arg( array( diff --git a/wp-admin/theme-editor.php b/wp-admin/theme-editor.php index 644084318b..7db3e84a8e 100644 --- a/wp-admin/theme-editor.php +++ b/wp-admin/theme-editor.php @@ -196,7 +196,7 @@ if ( $file_description !== $file_show ) {

- +

diff --git a/wp-includes/class-wp-theme.php b/wp-includes/class-wp-theme.php index 2e4512d033..66df8a6b67 100644 --- a/wp-includes/class-wp-theme.php +++ b/wp-includes/class-wp-theme.php @@ -1460,6 +1460,64 @@ final class WP_Theme implements ArrayAccess { return false; } + /** + * Returns whether this theme is a block-based theme or not. + * + * @since 5.9.0 + * + * @return bool + */ + public function is_block_based() { + $paths_to_index_block_template = array( + $this->get_file_path( '/block-templates/index.html' ), + $this->get_file_path( '/templates/index.html' ), + ); + + 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; + } + } + + return false; + } + + /** + * Retrieves the path of a file in the theme. + * + * Searches in the stylesheet directory before the template directory so themes + * which inherit from a parent theme can just override one file. + * + * @since 5.9.0 + * + * @param string $file Optional. File to search for in the stylesheet directory. + * @return string The path of the file. + */ + public function get_file_path( $file = '' ) { + $file = ltrim( $file, '/' ); + + $stylesheet_directory = $this->get_stylesheet_directory(); + $template_directory = $this->get_template_directory(); + + if ( empty( $file ) ) { + $path = $stylesheet_directory; + } elseif ( file_exists( $stylesheet_directory . '/' . $file ) ) { + $path = $stylesheet_directory . '/' . $file; + } else { + $path = $template_directory . '/' . $file; + } + + /** + * Filters the path to a file in the theme. + * + * @since 5.9.0 + * + * @param string $path The file path. + * @param string $file The requested file to search for. + */ + return apply_filters( 'theme_file_path', $path, $file ); + } + /** * Determines the latest WordPress default theme that is installed. * diff --git a/wp-includes/version.php b/wp-includes/version.php index 9ede554ad4..c7d971fce6 100644 --- a/wp-includes/version.php +++ b/wp-includes/version.php @@ -16,7 +16,7 @@ * * @global string $wp_version */ -$wp_version = '5.9-alpha-52278'; +$wp_version = '5.9-alpha-52279'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.