Je viens de me rendre compte que le fichier traditionnel uninstall.php
d'un plugin ne fonctionne pas dans Multisite.
if ( !defined( 'WP_UNINSTALL_PLUGIN' ) )
exit();
delete_option( 'plugin_option_name' );
Cela ne supprime pas les options de sous-sites dans toutes les tables wp_SITE-ID_options
.
Existe-t-il un moyen standard de le faire?
En recherchant dans tous les fichiers uninstall.php
que j'ai dans mon disque dur, j'en ai trouvé deux qui avaient la fonction is_multisite()
: Éditeur de rôle utilisateur et Ajouter un code à la tête .
Les deux utilisent une boucle $wpdb
. Simplifié:
<?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 );
}
Questions/réponses connexes: Désinstaller, activer, désactiver un plug-in: caractéristiques générales et procédures