deactivate_plugins() – Deactivate a single plugin or multiple plugins.

You appear to be a bot. Output may be restricted

Description

Deactivates a single plugin or multiple plugins.

The deactivation hook is disabled by the plugin upgrader by using the $silent parameter.

Usage

deactivate_plugins( $plugins, $silent, $network_wide );

Parameters

$plugins
( string|string[] ) required – Single plugin or list of plugins to deactivate.
$silent
( bool ) optional – Prevent calling deactivation hooks. Default 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 null.

Returns

void

Source

File name: wordpress/wp-admin/includes/plugin.php
Lines:

1 to 93 of 93
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 && wp_is_recovery_mode() ) {
      list( $extension ) = explode( '/', $plugin );
      wp_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 );
  }
}
 

 View on GitHub View on Trac