Eliminar tablas de la base de datos al eliminar el plugin
Creé un plugin y quiero agregar una función para eliminar mis tablas de la base de datos cuando un usuario elimina mi plugin. Creé una función que elimina las tablas de la BD cuando un usuario desactiva mi plugin, pero no quiero eso. Aquí está el código:
// Eliminar tabla cuando se desactiva
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' );
Como pueden ver, esta función elimina las tablas cuando el plugin está desactivado, pero necesito hacer eso cuando el plugin es eliminado.

Puedes hacer esto usando el soporte uninstall.php de WordPress:
<?php
if( ! defined( 'WP_UNINSTALL_PLUGIN' ) ) exit();
global $wpdb;
$wpdb->query( "DROP TABLE IF EXISTS NestoNovo" );
delete_option("my_plugin_db_version");
?>
Este archivo uninstall.php se llama cuando tu plugin es eliminado.

También lee: https://devnote.in/delete-tables-from-the-database-when-deactivating-a-plugin/

Ingresa el código aquí:
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");
}

Debes usar el hook register_uninstall_hook
en lugar de register_deactivation_hook
para eliminar tablas de la base de datos.
register_deactivation_hook
se ejecuta cuando desactivamos un plugin y register_uninstall_hook
se ejecuta cuando queremos eliminar/borrar
nuestro plugin.
Usa este código si solo tienes una tabla:
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');
Si tienes más de dos tablas, entonces usa este código:
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');
Enlaces de referencia:
https://developer.wordpress.org/reference/functions/register_uninstall_hook/ https://developer.wordpress.org/plugins/plugin-basics/uninstall-methods/

Sé que existe un hook llamado: register_deactivation_hook
que puedes usar para ejecutar acciones cuando el plugin se desactiva.
Revisa la documentación y comprueba si es lo que estás buscando.
Por ejemplo:
**register_deactivation_hook**(__FILE__, 'sm_deactivation');
function myplugin_deactivation(){
/*
Acciones
*/}

Si estás usando "WORDPRESS PLUGIN BOILERPLATE GENERATOR" (wppb)
ve a includes\class-...-deactivator.php
y escribe el siguiente código (modifícalo según tus necesidades):
global $wpdb;
$tableArray = [
$wpdb->prefix . "table1",
$wpdb->prefix . "table2",
];
foreach($tableArray as $table){
$wpdb->query("DROP TABLE IF EXISTS $table");
}
Gracias

Desafortunadamente, WordPress no expone funcionalidad para hacer eso. Solo soporta el hook register_uninstall_hook. Este hook se llama cuando el usuario hace clic en el enlace de desinstalación que solicita que el plugin se desinstale a sí mismo. El enlace no estará activo a menos que el plugin esté enganchado a la acción. ver http://codex.wordpress.org/Function_Reference/register_uninstall_hook
y el hook register_deactivation_hook. Lo que hacen la mayoría de los desarrolladores de plugins es añadir una casilla de verificación a la tabla de configuración usando get_option, update_option. Cuando esta opción está marcada, los datos son eliminados.
De esta manera, la desactivación temporal no restablece la tabla de opciones de tu plugin.
