Eliminare le tabelle dal database quando si elimina il plugin
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.

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.

Leggi anche: https://devnote.in/delete-tables-from-the-database-when-deactivating-a-plugin/

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

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/

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
*/}

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

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.
