Disattivazione e Disinstallazione Plugin tramite Menu Opzioni

8 nov 2011, 22:18:34
Visualizzazioni: 1.01K
Voti: 2

Sto creando il mio primo plugin (modificandone uno esistente per le mie esigenze) e, nonostante funzioni correttamente, sto cercando di creare un semplice menu opzioni per permettere sia la disattivazione del plugin, sia la disattivazione con rimozione delle tabelle create dal plugin.

Nel pannello opzioni ho il seguente form che permette all'amministratore di selezionare una checkbox e poi inviare un form che spero possa:

  1. Rimuovere le tabelle create dal plugin
  2. Disattivare il plugin
  3. Reindirizzare nuovamente alla pagina dei plugin

Ecco il codice per la mia pagina opzioni:

<p class="submitmetataxonomyuninstall">
<form method="post" action=""; onsubmit="if (!this.verify.checked) return false;">
<?php _e("Elimina anche tutte le Tabelle & Dati dal Database:", 'menu-test' ); ?>
    <input type="checkbox" name="verify" /></p>
<p><i>(IMPORTANTE: Questa azione NON può essere annullata e rimuoverà tutte le tabelle e i dati dal database.)</i></p>
<p class="submit"><input type="submit" name="submitmetataxonomyuninstall" class="button-primary" value="<?php esc_attr_e('Disattiva & Disinstalla') ?>" /><small> (La checkbox sopra deve essere selezionata per far funzionare il pulsante.)</small></p>
</form>
</p>

Non riesco però a farlo funzionare.

Questa sarebbe la funzione che penso di dover chiamare (quando è nella funzione principale del plugin disattiva e rimuove le tabelle senza problemi):

register_deactivation_hook( __FILE__, 'simple_term_meta_uninstall' );
function simple_term_meta_uninstall() {
    global $wpdb;

    if (function_exists('is_multisite') && is_multisite()) {
        // controlla se è un'attivazione di rete - in tal caso, esegui la funzione di attivazione per ogni blog id
        if (isset($_GET['networkwide']) && ($_GET['networkwide'] == 1)) {
            $old_blog = $wpdb->blogid;
            // Ottieni tutti gli ID blog
            $blogids = $wpdb->get_col($wpdb->prepare("SELECT blog_id FROM $wpdb->blogs"));
            foreach ($blogids as $blog_id) {
                switch_to_blog($blog_id);
                _simple_term_meta_uninstall();
            }
            switch_to_blog($old_blog);
            return;
        }   
    } 
    _simple_term_meta_uninstall();      
}

Credo che questa chiami anche questa funzione dal file esistente del plugin:

register_uninstall_hook( __FILE__, 'simple_term_meta_uninstall' );

function _simple_term_meta_uninstall()
{
    global $wpdb;

    $table_name = $wpdb->prefix . 'termmeta';

    $wpdb->query("DROP TABLE IF EXISTS $table_name");

    delete_option( "simple_term_meta_db_version" );
}

Come potrei chiamare questa funzione usando il form mostrato?

0
Tutte le risposte alla domanda 1
2

Hai solo bisogno di ottenere il basename di qualsiasi plugin per disattivarlo.

if( $uninstall == true ) {
    delete_option( 'CHANGETHIS' );
    deactivate_plugins( plugin_basename( __FILE__ ) );
}

Generalmente hanno questa forma: cartelladelmioplugin/fileprincipaledelplugin.php

Prova così.


Ci sono diversi modi per farlo funzionare.

Se vuoi un pulsante nella pagina delle opzioni per richiamare quella funzione, puoi semplicemente inviare un POST alla pagina delle opzioni e verificare se il pulsante di disinstallazione è stato cliccato.

Qualcosa come:

$uninstall = isset( $_POST[ 'uninstall' ] ) ? true : false;
9 nov 2011 01:11:58
Commenti

Grazie Grok - Come posso collegare la funzione di disinstallazione al pulsante di invio nel menu delle opzioni che ho creato?

Rob Rob
9 nov 2011 13:19:06

Ho aggiornato la risposta per mostrare un modo per realizzarlo! Buona fortuna.

Sterling Hamilton Sterling Hamilton
10 nov 2011 08:12:44