deactivate_plugins( string|array $plugins, bool $silent = false, mixed $network_wide = null )

Deactivate a single plugin or multiple plugins.


Description Description

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


Parameters Parameters

$plugins

(string|array) (Required) Single plugin or list of plugins to deactivate.

$silent

(bool) (Optional) Prevent calling deactivation hooks. Default is false.

Default value: false

$network_wide

(mixed) (Optional) Whether to deactivate the plugin for all sites in the network. A value of null (the default) will deactivate plugins for both the site and the network.

Default value: null


Top ↑

Source Source

File: wp-admin/includes/plugin.php

713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
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 = $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 is 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 );
            if ( false !== $key ) {
                $do_blog = true;
                unset( $current[ $key ] );
            }
        }
 
        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 is 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 );
    }
}

Top ↑

Changelog Changelog

Changelog
Version Description
2.5.0 Introduced.


Top ↑

User Contributed Notes User Contributed Notes

  1. Skip to note 1 content
    Contributed by Codex

    Example

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    /**
     * Deactivate plugin example class.
     */
    class WPDocs_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__ ) );
                wp_die( __( 'This plugin requires PHP Version 5.4 or greater.  Sorry about that.', 'textdomain' ) );
            }
             
            // Do activate Stuff now.
        }
    }
    new WPDocs_Deactivate_Plugin();

You must log in before being able to contribute a note or feedback.