From 567b2518f8d9207bc0da9c8f329fd969debdc2e2 Mon Sep 17 00:00:00 2001 From: Peter Wilson <peterwilsoncc@git.wordpress.org> Date: Fri, 4 Mar 2022 02:37:58 +0000 Subject: [PATCH] Themes: Hide block themes' live preview link following installation. Prevent the Customizer/Live Preview button from showing for installed block themes when on the theme installation page. Props antonvlasenko, costdev, ironprogrammer. Fixes #54878. git-svn-id: https://develop.svn.wordpress.org/trunk@52819 602fd350-edb4-49c9-b593-d223f7449a82 --- src/js/_enqueues/wp/theme.js | 3 +++ src/wp-admin/includes/ajax-actions.php | 25 ++++++++++++++++++++++++- src/wp-admin/theme-install.php | 11 +++++++---- 3 files changed, 34 insertions(+), 5 deletions(-) diff --git a/src/js/_enqueues/wp/theme.js b/src/js/_enqueues/wp/theme.js index 818c201496..b3821246d9 100644 --- a/src/js/_enqueues/wp/theme.js +++ b/src/js/_enqueues/wp/theme.js @@ -622,6 +622,9 @@ themes.view.Theme = wp.Backbone.View.extend({ if ( _this.model.get( 'id' ) === response.slug ) { _this.model.set( { 'installed': true } ); } + if ( response.blockTheme ) { + _this.model.set( { 'block_theme': true } ); + } } ); wp.updates.installTheme( { diff --git a/src/wp-admin/includes/ajax-actions.php b/src/wp-admin/includes/ajax-actions.php index 191e5b54dd..ecea223667 100644 --- a/src/wp-admin/includes/ajax-actions.php +++ b/src/wp-admin/includes/ajax-actions.php @@ -3568,6 +3568,19 @@ function wp_ajax_query_themes() { $update_php = network_admin_url( 'update.php?action=install-theme' ); + $installed_themes = search_theme_directories(); + + if ( false === $installed_themes ) { + $installed_themes = array(); + } + + foreach ( $installed_themes as $theme_slug => $theme_data ) { + // Ignore child themes. + if ( str_contains( $theme_slug, '/' ) ) { + unset( $installed_themes[ $theme_slug ] ); + } + } + foreach ( $api->themes as &$theme ) { $theme->install_url = add_query_arg( array( @@ -3599,12 +3612,19 @@ function wp_ajax_query_themes() { } } + $is_theme_installed = array_key_exists( $theme->slug, $installed_themes ); + + // We only care about installed themes. + $theme->block_theme = $is_theme_installed && wp_get_theme( $theme->slug )->is_block_theme(); + if ( ! is_multisite() && current_user_can( 'edit_theme_options' ) && current_user_can( 'customize' ) ) { + $customize_url = $theme->block_theme ? admin_url( 'site-editor.php' ) : wp_customize_url( $theme->slug ); + $theme->customize_url = add_query_arg( array( 'return' => urlencode( network_admin_url( 'theme-install.php', 'relative' ) ), ), - wp_customize_url( $theme->slug ) + $customize_url ); } @@ -4139,6 +4159,9 @@ function wp_ajax_install_theme() { } } + $theme = wp_get_theme( $slug ); + $status['blockTheme'] = $theme->is_block_theme(); + if ( ! is_multisite() && current_user_can( 'edit_theme_options' ) && current_user_can( 'customize' ) ) { $status['customizeUrl'] = add_query_arg( array( diff --git a/src/wp-admin/theme-install.php b/src/wp-admin/theme-install.php index 71e95c987c..1790af78e5 100644 --- a/src/wp-admin/theme-install.php +++ b/src/wp-admin/theme-install.php @@ -35,9 +35,10 @@ if ( false === $installed_themes ) { $installed_themes = array(); } -foreach ( $installed_themes as $k => $v ) { - if ( false !== strpos( $k, '/' ) ) { - unset( $installed_themes[ $k ] ); +foreach ( $installed_themes as $theme_slug => $theme_data ) { + // Ignore child themes. + if ( str_contains( $theme_slug, '/' ) ) { + unset( $installed_themes[ $theme_slug ] ); } } @@ -373,7 +374,9 @@ if ( $tab ) { <# } #> <# if ( data.customize_url ) { #> <# if ( ! data.active ) { #> - <a class="button load-customize" href="{{ data.customize_url }}"><?php _e( 'Live Preview' ); ?></a> + <# if ( ! data.block_theme ) { #> + <a class="button load-customize" href="{{ data.customize_url }}"><?php _e( 'Live Preview' ); ?></a> + <# } #> <# } else { #> <a class="button load-customize" href="{{ data.customize_url }}"><?php _e( 'Customize' ); ?></a> <# } #>