Disattivazione e Disinstallazione Plugin tramite Menu Opzioni
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:
- Rimuovere le tabelle create dal plugin
- Disattivare il plugin
- 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?
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;
