Eliminare le tabelle dal database quando si elimina il plugin

21 nov 2014, 23:38:01
Visualizzazioni: 51.2K
Voti: 19

Ho creato un plugin e voglio aggiungere una funzione per eliminare le mie tabelle dal database quando un utente elimina il mio plugin. Ho creato una funzione che elimina le tabelle dal DB quando un utente disattiva il mio plugin, ma non è quello che voglio. Ecco il codice:

// Elimina la tabella alla disattivazione
function my_plugin_remove_database() {
     global $wpdb;
     $table_name = "NestoNovo";
     $sql = "DROP TABLE IF EXISTS $table_name;";
     $wpdb->query($sql);
     delete_option("my_plugin_db_version");
}    
register_deactivation_hook( __FILE__, 'my_plugin_remove_database' );

Come potete vedere, questa funzione elimina le tabelle quando il plugin viene disattivato, ma ho bisogno di farlo quando il plugin viene eliminato.

2
Commenti

Hai provato register_uninstall_hook?

Andrew Bartel Andrew Bartel
22 nov 2014 00:01:52

Grazie per la risposta... sì... l'ho provato... ma non è successo niente.. :/

x-y-z-select x-y-z-select
22 nov 2014 00:44:40
Tutte le risposte alla domanda 6
2
30

Puoi farlo utilizzando il supporto uninstall.php di WordPress:

<?php
    if( ! defined( 'WP_UNINSTALL_PLUGIN' ) ) exit();
    global $wpdb;
    $wpdb->query( "DROP TABLE IF EXISTS NestoNovo" );
    delete_option("my_plugin_db_version");
?>

Questo file uninstall.php viene chiamato quando il tuo plugin viene eliminato.

20 dic 2014 17:29:28
Commenti

$wpdb->query( "DROP TABLE IF EXISTS {$wpdb->prefix}my_table_name" );

Questa è un po' meglio

Andy Andy
27 set 2021 19:21:25
0
13

Inserisci il codice qui:

register_deactivation_hook( __FILE__, 'my_plugin_remove_database' );
function my_plugin_remove_database() {
     global $wpdb;
     $table_name = $wpdb->prefix . 'NestoNovo';
     $sql = "DROP TABLE IF EXISTS $table_name";
     $wpdb->query($sql);
     delete_option("my_plugin_db_version");
}   
5 apr 2017 14:39:05
1

Devi utilizzare l'hook register_uninstall_hook invece di register_deactivation_hook per eliminare le tabelle dal database.

register_deactivation_hook viene attivato quando disattiviamo un plugin, mentre register_uninstall_hook viene attivato quando vogliamo rimuovere/cancellare il nostro plugin.

Utilizza questo codice se hai solo una tabella:

function delete_plugin_database_table(){
    global $wpdb;
    $table_name = $wpdb->prefix . 'table_name';
    $sql = "DROP TABLE IF EXISTS $table_name";
    $wpdb->query($sql);
}

register_uninstall_hook(__FILE__, 'delete_plugin_database_table');

Se hai più di due tabelle, utilizza questo codice:

function delete_plugin_database_tables(){
        global $wpdb;
        $tableArray = [   
          $wpdb->prefix . "table_name1",
          $wpdb->prefix . "table_name2",
          $wpdb->prefix . "table_name3",
          $wpdb->prefix . "table_name4",
       ];

      foreach ($tableArray as $tablename) {
         $wpdb->query("DROP TABLE IF EXISTS $tablename");
      }
    }

    register_uninstall_hook(__FILE__, 'delete_plugin_database_tables');

Link di riferimento:

https://developer.wordpress.org/reference/functions/register_uninstall_hook/ https://developer.wordpress.org/plugins/plugin-basics/uninstall-methods/

25 mar 2019 15:32:09
Commenti

Grazie, mi hai salvato la giornata :)

Arman H Arman H
24 mar 2020 08:40:36
0
-1

So che esiste un hook chiamato: register_deactivation_hook che puoi utilizzare per eseguire azioni quando il plugin viene disattivato. Dai un'occhiata alla documentazione e verifica se è ciò che stai cercando.

Ad esempio:

**register_deactivation_hook**(__FILE__, 'sm_deactivation');
function myplugin_deactivation(){
/*
     Azioni da eseguire
*/}
19 set 2016 10:47:31
1
-1

Se stai utilizzando "WORDPRESS PLUGIN BOILERPLATE GENERATOR" wppb

vai su includes\class-...-deactivator.php

e scrivi il seguente codice (modificalo secondo le tue necessità)

global $wpdb;

    $tableArray = [
        $wpdb->prefix . "table1",
        $wpdb->prefix . "table2",
    ];
    foreach($tableArray as $table){
        $wpdb->query("DROP TABLE IF EXISTS $table");
    }

Grazie

24 mar 2020 08:43:41
Commenti

disinstallare/eliminare e disattivare non sono la stessa cosa. a volte si desidera disattivare il plugin senza distruggere tutti i dati che potrebbe aver raccolto.

S. Imp S. Imp
20 giu 2022 23:05:21
0
-4

Sfortunatamente, WordPress non espone funzionalità per fare ciò. Supporta solo l'hook register_uninstall_hook. Questo hook viene chiamato quando l'utente clicca sul link di disinstallazione che richiede al plugin di disinstallarsi. Il link non sarà attivo a meno che il plugin non si agganci all'azione. vedi http://codex.wordpress.org/Function_Reference/register_uninstall_hook

e l'hook register_deactivation_hook. Quello che la maggior parte degli sviluppatori di plugin fa è aggiungere una checkbox alla tabella delle impostazioni utilizzando get_option, update_option. Quando questa opzione è selezionata, i dati vengono rimossi.

In questo modo, la disattivazione temporanea non resetta la tabella delle opzioni del tuo plugin.

22 nov 2014 17:30:41