11.4. WordPress Plugin Deactivation

In the previous blogs, we installed WordPress Multisite and learned to code plugin multisite activation. WordPress Plugin Deactivation follows similar pattern but in Share on Social Plugin it has some minor twists.

Share on Social Plugin uses the same class file class-activator.php for deactivation too. In Sos_Activator::setup() method we register Sos_Activator::deactivate() as the deactivation method using WordPress function register_deactivation_hook().

share-on-social/admin/class-activator.php

class Sos_Activator {

    public function setup () {
        register_deactivation_hook( SOS_PLUGIN_FILE, 
                array( $this,'deactivate' ) );
    }

In the deactivation method, we use WordPress function is_multisite() and parameter $networkwide to call Sos_Activator::deactivate_for_blog() method, which deletes the default basic locker, for site level deactivation either in multisite or in single site installation.

share-on-social/admin/class-activator.php

    public function deactivate ( $networkwide ) {
        if ( function_exists( 'is_multisite' ) && is_multisite() ) {
            if ( ! $networkwide ) {
                if ( false == current_user_can( 'activate_plugins' ) ) {
                    return;
                }
                $this->deactivate_for_blog();
            }
        } else {
            if ( false == current_user_can( 'activate_plugins' ) ) {
                return;
            }
            $this->deactivate_for_blog();
        }
    }

    public function deactivate_for_blog () {
        $this->delete_basic_locker();
    }

For multsite network wide deactivation, we don’t wish to delete the basic locker and hence, Sos_Activator::deactivate_for_blog() is not called.

Purge

During deactivation, customs lockers created by the admins, plugins’ settings and stats are not deleted. These plugin entities are purged from database only when plugin is uninstalled.

Purge is deferred till the last stage so that plugin entities are available in case admin chooses to re-activate the plugin.

 
 

 

In the next section, we explain the steps to properly uninstall the plugin.