Disinstallare lo script per un plug-in in Multisito


9

Mi sono appena reso conto che il uninstall.phpfile tradizionale lungo un plugin non funziona in Multisito.

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

delete_option( 'plugin_option_name' );

Ciò non elimina le opzioni dei siti secondari in tutte le wp_SITE-ID_optionstabelle.

Esiste un modo standard per farlo?

Risposte:


8

Cercando all'interno di tutti i uninstall.phpfile che ho nel mio disco rigido, ne ho trovati due che avevano la funzione is_multisite(): User Role Editor e Add Code to Head .

Entrambi usano un $wpdbciclo. semplificata:

<?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 );
}

Domande e risposte correlate: Disinstalla, Attiva, Disattiva un plug-in: funzionalità tipiche e istruzioni


1
Utilizzerai restore_current_bloginvece di archiviare l'attuale ID blog e di tornare più tardi
shea

@bungeshea, sì, molto più elegante :) Stavo per modificare la risposta ma mi chiedo: il multisito uninstall.phpnon funzionerà sempre dall'ID blog == 1?
brasofilo,

Puoi eliminare solo i plug-in dalla dashboard di rete, che si trova sul sito principale (blog id 1)
shea

Sì, certo, e, dopo tutto, è una sciocchezza usare switch_to_blog(1)quando abbiamo la restore_funzione ... Non ricordare esattamente dove ho letto qualcosa sul cambiamento dell'istanza principale del blog ...
brasofilo,

L'hai provato a fondo? Guardando il codice sorgente, sembrerebbe che il uninstall.phpfile all'interno di un plugin venga chiamato solo se 1) esistesse prima dell'attivazione dei plugin (in tal caso, il nome del plugin sarebbe memorizzato nella tabella delle opzioni del blog); 2) quando si chiama get_option('uninstall_plugins')effettivamente si ottiene quel plug-in specifico. Non sembra funzionare su Multisito perché le informazioni sui plug-in a livello di rete sono archiviate nella sitemetatabella.
Tomas Buteler,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.