Uninstall script for a plugin in Multisite

I’ve just realized that the traditional uninstall.php file along a plugin is not working in Multisite.

if ( !defined( 'WP_UNINSTALL_PLUGIN' ) ) 
    exit();

delete_option( 'plugin_option_name' );

This doesn’t delete the sub-sites options in all wp_SITE-ID_options tables.

Read More

Is there a standard way for doing this?

Related posts

Leave a Reply

1 comment

  1. Searching inside all uninstall.php files that I have in my hard-drive, I’ve found two that had the function is_multisite(): User Role Editor and Add Code to Head.

    Both use a $wpdb loop. Simplified:

    <?php
    /**
     * Plugin Uninstall Procedure
     */
    
    // Make sure that we are uninstalling
    if ( !defined( 'WP_UNINSTALL_PLUGIN' ) ) 
        exit();
    
    // Leave no trail
    $option_name = 'plugin_option_name';
    
    if ( !is_multisite() ) 
    {
        delete_option( $option_name );
    } 
    else 
    {
        global $wpdb;
        $blog_ids = $wpdb->get_col( "SELECT blog_id FROM $wpdb->blogs" );
        $original_blog_id = get_current_blog_id();
    
        foreach ( $blog_ids as $blog_id ) 
        {
            switch_to_blog( $blog_id );
            delete_option( $option_name );     
    
            // OR
            // delete_site_option( $option_name );  
        }
    
        switch_to_blog( $original_blog_id );
    }
    

    Related Q&A: Uninstall, Activate, Deactivate a plugin: typical features & how-to