deactivate_plugins()
最后更新于:2021-11-25 23:16:04
deactivate_plugins( string|string[]$plugins, bool$silent=false, bool|null$network_wide=null)Deactivate a single plugin or multiple plugins.
参数
- $plugins
-
(string|string[]) (Required) Single plugin or list of plugins to deactivate.
- $silent
-
(bool) (Optional) Prevent calling deactivation hooks.
Default value: false
- $network_wide
-
(bool|null) (Optional) Whether to deactivate the plugin for all sites in the network. A value of null will deactivate plugins for both the network and the current site. Multisite only.
Default value: null
源文件
文件: gc-admin/includes/plugin.php
function deactivate_plugins( $plugins, $silent = false, $network_wide = null ) {
if ( is_multisite() ) {
$network_current = get_site_option( 'active_sitewide_plugins', array() );
}
$current = get_option( 'active_plugins', array() );
$do_blog = false;
$do_network = false;
foreach ( (array) $plugins as $plugin ) {
$plugin = plugin_basename( trim( $plugin ) );
if ( ! is_plugin_active( $plugin ) ) {
continue;
}
$network_deactivating = ( false !== $network_wide ) && is_plugin_active_for_network( $plugin );
if ( ! $silent ) {
/**
* Fires before a plugin is deactivated.
*
* If a plugin is silently deactivated (such as during an update),
* this hook does not fire.
*
* @since 2.9.0
*
* @param string $plugin Path to the plugin file relative to the plugins directory.
* @param bool $network_deactivating Whether the plugin is deactivated for all sites in the network
* or just the current site. Multisite only. Default false.
*/
do_action( 'deactivate_plugin', $plugin, $network_deactivating );
}
if ( false !== $network_wide ) {
if ( is_plugin_active_for_network( $plugin ) ) {
$do_network = true;
unset( $network_current[ $plugin ] );
} elseif ( $network_wide ) {
continue;
}
}
if ( true !== $network_wide ) {
$key = array_search( $plugin, $current, true );
if ( false !== $key ) {
$do_blog = true;
unset( $current[ $key ] );
}
}
if ( $do_blog && gc_is_recovery_mode() ) {
list( $extension ) = explode( '/', $plugin );
gc_paused_plugins()->delete( $extension );
}
if ( ! $silent ) {
/**
* Fires as a specific plugin is being deactivated.
*
* This hook is the "deactivation" hook used internally by register_deactivation_hook().
* The dynamic portion of the hook name, `$plugin`, refers to the plugin basename.
*
* If a plugin is silently deactivated (such as during an update), this hook does not fire.
*
* @since 2.0.0
*
* @param bool $network_deactivating Whether the plugin is deactivated for all sites in the network
* or just the current site. Multisite only. Default false.
*/
do_action( "deactivate_{$plugin}", $network_deactivating );
/**
* Fires after a plugin is deactivated.
*
* If a plugin is silently deactivated (such as during an update),
* this hook does not fire.
*
* @since 2.9.0
*
* @param string $plugin Path to the plugin file relative to the plugins directory.
* @param bool $network_deactivating Whether the plugin is deactivated for all sites in the network
* or just the current site. Multisite only. Default false.
*/
do_action( 'deactivated_plugin', $plugin, $network_deactivating );
}
}
if ( $do_blog ) {
update_option( 'active_plugins', $current );
}
if ( $do_network ) {
update_site_option( 'active_sitewide_plugins', $network_current );
}
}
/** * Deactivate plugin example class. */ class GCDocs_Deactivate_Plugin { /** * Constructor. */ public function __construct() { register_activation_hook( __FILE__, array( $this , 'activate' ) ); } /** * Attempts to activate the plugin if at least PHP 5.4. */ public function activate() { // Check PHP Version and deactivate & die if it doesn't meet minimum requirements. if ( version_compare( PHP_VERSION, '5.4', '<=' ) ) { deactivate_plugins( plugin_basename( __FILE__ ) ); gc_die( __( 'This plugin requires PHP Version 5.4 or greater. Sorry about that.', 'textdomain' ) ); } // Do activate Stuff now. } } new GCDocs_Deactivate_Plugin();