Upgrade/Install: Notify users of deactivated plugins during upgrade.
This adds a one-off notice to the dashboard in the event WordPress has automatically deactivated a plugin due to incompatibility with the new version of WordPress. Introduces the new private function `deactivated_plugins_notice()` to display the notice in the dashboard. Introduces the new auto-loaded option `wp_force_deactivated_plugins` to store a list of automatically deactivated plugins; the option is used on both a site and network level. Follow up to [51180]. Props desrosj, jorbin, azaozz, SergeyBiryukov, peterwilsoncc. See #53432. Built from https://develop.svn.wordpress.org/trunk@51266 git-svn-id: http://core.svn.wordpress.org/trunk@50875 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
parent
8fa45ab8f8
commit
1b7cd950ca
|
@ -114,6 +114,7 @@ add_action( 'load-plugins.php', 'wp_plugin_update_rows', 20 ); // After wp_updat
|
||||||
add_action( 'load-themes.php', 'wp_theme_update_rows', 20 ); // After wp_update_themes() is called.
|
add_action( 'load-themes.php', 'wp_theme_update_rows', 20 ); // After wp_update_themes() is called.
|
||||||
|
|
||||||
add_action( 'admin_notices', 'update_nag', 3 );
|
add_action( 'admin_notices', 'update_nag', 3 );
|
||||||
|
add_action( 'admin_notices', 'deactivated_plugins_notice', 5 );
|
||||||
add_action( 'admin_notices', 'paused_plugins_notice', 5 );
|
add_action( 'admin_notices', 'paused_plugins_notice', 5 );
|
||||||
add_action( 'admin_notices', 'paused_themes_notice', 5 );
|
add_action( 'admin_notices', 'paused_themes_notice', 5 );
|
||||||
add_action( 'admin_notices', 'maintenance_nag', 10 );
|
add_action( 'admin_notices', 'maintenance_nag', 10 );
|
||||||
|
|
|
@ -2473,3 +2473,88 @@ function paused_plugins_notice() {
|
||||||
__( 'Go to the Plugins screen' )
|
__( 'Go to the Plugins screen' )
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Renders an admin notice when a plugin was deactivated during an update.
|
||||||
|
*
|
||||||
|
* Displays an admin notice in case a plugin has been deactivated during an
|
||||||
|
* upgrade due to incompatibility with the current version of WordPress.
|
||||||
|
*
|
||||||
|
* @since 5.8.0
|
||||||
|
* @access private
|
||||||
|
*
|
||||||
|
* @global string $pagenow
|
||||||
|
* @global string $wp_version
|
||||||
|
*/
|
||||||
|
function deactivated_plugins_notice() {
|
||||||
|
if ( 'plugins.php' === $GLOBALS['pagenow'] ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( ! current_user_can( 'activate_plugins' ) ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$blog_deactivated_plugins = get_option( 'wp_force_deactivated_plugins' );
|
||||||
|
$site_deactivated_plugins = array();
|
||||||
|
|
||||||
|
if ( false === $blog_deactivated_plugins ) {
|
||||||
|
// Option not in database, add an empty array to avoid extra DB queries on subsequent loads.
|
||||||
|
update_option( 'wp_force_deactivated_plugins', array() );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( is_multisite() ) {
|
||||||
|
$site_deactivated_plugins = get_site_option( 'wp_force_deactivated_plugins' );
|
||||||
|
if ( false === $site_deactivated_plugins ) {
|
||||||
|
// Option not in database, add an empty array to avoid extra DB queries on subsequent loads.
|
||||||
|
update_site_option( 'wp_force_deactivated_plugins', array() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( empty( $blog_deactivated_plugins ) && empty( $site_deactivated_plugins ) ) {
|
||||||
|
// No deactivated plugins.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$deactivated_plugins = array_merge( $blog_deactivated_plugins, $site_deactivated_plugins );
|
||||||
|
|
||||||
|
foreach ( $deactivated_plugins as $plugin ) {
|
||||||
|
if ( ! empty( $plugin['version_compatible'] ) && ! empty( $plugin['version_deactivated'] ) ) {
|
||||||
|
$explanation = sprintf(
|
||||||
|
/* translators: 1: Name of deactivated plugin, 2: Plugin version deactivated, 3: Current WP version, 4: Compatible plugin version */
|
||||||
|
__( '%1$s %2$s was deactivated due to incompatibility with WordPress %3$s, please upgrade to %1$s %4$s or later.' ),
|
||||||
|
$plugin['plugin_name'],
|
||||||
|
$plugin['version_deactivated'],
|
||||||
|
$GLOBALS['wp_version'],
|
||||||
|
$plugin['version_compatible']
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
$explanation = sprintf(
|
||||||
|
/* translators: 1: Name of deactivated plugin, 2: Plugin version deactivated, 3: Current WP version */
|
||||||
|
__( '%1$s %2$s was deactivated due to incompatibility with WordPress %3$s.' ),
|
||||||
|
$plugin['plugin_name'],
|
||||||
|
! empty( $plugin['version_deactivated'] ) ? $plugin['version_deactivated'] : '',
|
||||||
|
$GLOBALS['wp_version'],
|
||||||
|
$plugin['version_compatible']
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
printf(
|
||||||
|
'<div class="notice notice-warning"><p><strong>%s</strong><br>%s</p><p><a href="%s">%s</a></p></div>',
|
||||||
|
sprintf(
|
||||||
|
/* translators: %s: Name of deactivated plugin */
|
||||||
|
__( '%s plugin deactivated during WordPress upgrade.' ),
|
||||||
|
$plugin['plugin_name']
|
||||||
|
),
|
||||||
|
$explanation,
|
||||||
|
esc_url( admin_url( 'plugins.php?plugin_status=inactive' ) ),
|
||||||
|
__( 'Go to the Plugins screen' )
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Empty the options.
|
||||||
|
update_option( 'wp_force_deactivated_plugins', array() );
|
||||||
|
if ( is_multisite() ) {
|
||||||
|
update_site_option( 'wp_force_deactivated_plugins', array() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -542,6 +542,9 @@ function populate_options( array $options = array() ) {
|
||||||
// Default to enabled for new installs.
|
// Default to enabled for new installs.
|
||||||
// See https://core.trac.wordpress.org/ticket/51742.
|
// See https://core.trac.wordpress.org/ticket/51742.
|
||||||
'auto_update_core_major' => 'enabled',
|
'auto_update_core_major' => 'enabled',
|
||||||
|
|
||||||
|
// 5.8.0
|
||||||
|
'wp_force_deactivated_plugins' => array(),
|
||||||
);
|
);
|
||||||
|
|
||||||
// 3.3.0
|
// 3.3.0
|
||||||
|
|
|
@ -1672,6 +1672,20 @@ function _upgrade_440_force_deactivate_incompatible_plugins() {
|
||||||
*/
|
*/
|
||||||
function _upgrade_580_force_deactivate_incompatible_plugins() {
|
function _upgrade_580_force_deactivate_incompatible_plugins() {
|
||||||
if ( defined( 'GUTENBERG_VERSION' ) && version_compare( GUTENBERG_VERSION, '10.7', '<=' ) ) {
|
if ( defined( 'GUTENBERG_VERSION' ) && version_compare( GUTENBERG_VERSION, '10.7', '<=' ) ) {
|
||||||
|
$deactivated_gutenberg['gutenberg'] = array(
|
||||||
|
'plugin_name' => 'Gutenberg',
|
||||||
|
'version_deactivated' => GUTENBERG_VERSION,
|
||||||
|
'version_compatible' => '10.8',
|
||||||
|
);
|
||||||
|
if ( is_plugin_active_for_network( 'gutenberg/gutenberg.php' ) ) {
|
||||||
|
$deactivated_plugins = get_site_option( 'wp_force_deactivated_plugins', array() );
|
||||||
|
$deactivated_plugins = array_merge( $deactivated_plugins, $deactivated_gutenberg );
|
||||||
|
update_site_option( 'wp_force_deactivated_plugins', $deactivated_plugins );
|
||||||
|
} else {
|
||||||
|
$deactivated_plugins = get_option( 'wp_force_deactivated_plugins', array() );
|
||||||
|
$deactivated_plugins = array_merge( $deactivated_plugins, $deactivated_gutenberg );
|
||||||
|
update_option( 'wp_force_deactivated_plugins', $deactivated_plugins );
|
||||||
|
}
|
||||||
deactivate_plugins( array( 'gutenberg/gutenberg.php' ), true );
|
deactivate_plugins( array( 'gutenberg/gutenberg.php' ), true );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
*
|
*
|
||||||
* @global string $wp_version
|
* @global string $wp_version
|
||||||
*/
|
*/
|
||||||
$wp_version = '5.8-beta4-51265';
|
$wp_version = '5.8-beta4-51266';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.
|
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.
|
||||||
|
|
Loading…
Reference in New Issue