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.
Is there a standard way for doing this?
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