Eliminar tablas de la base de datos al eliminar el plugin

21 nov 2014, 23:38:01
Vistas: 51.2K
Votos: 19

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.

2
Comentarios

¿Has probado register_uninstall_hook?

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

Gracias por la respuesta.. sí.. lo intenté.. pero no pasó nada.. :/

x-y-z-select x-y-z-select
22 nov 2014 00:44:40
Todas las respuestas a la pregunta 6
2
30

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.

20 dic 2014 17:29:28
Comentarios

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

Esto es un poco mejor

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

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");
}   
5 abr 2017 14:39:05
1

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/

25 mar 2019 15:32:09
Comentarios

Gracias, me salvaste el día :)

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

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  
*/}  
19 sept 2016 10:47:31
1
-1

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

24 mar 2020 08:43:41
Comentarios

desinstalar/eliminar y desactivar no son lo mismo. a veces quieres desactivar el plugin sin destruir todos los datos que pueda haber recolectado.

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

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.

22 nov 2014 17:30:41