Eliminar tablas de la base de datos al eliminar el complemento

13

Creé un complemento y quiero agregar una función para eliminar mis tablas de la base de datos cuando un usuario elimina mi complemento. Creé una función que elimina tablas de la base de datos cuando un usuario desactiva mi complemento, pero no quiero eso. Aquí está el código:

// Delete table when deactivate
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 puede ver, esta función elimina tablas cuando el complemento está desactivado, pero necesito hacerlo cuando se elimina el complemento.

Zzuum
fuente
¿Has probado register_uninstall_hook ?
Andrew Bartel
Gracias por la respuesta .. sí .. i tratar de que esto pasó nada .. ..: /
Zzuum

Respuestas:

23

Puedes hacer esto usando el soporte de WordPress uninstall.php:

<?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 se elimina el complemento.

johnh10
fuente
8

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

fuente
2

Debe usar register_uninstall_hookhook en lugar de register_deactivation_hookeliminar tablas de la base de datos.

register_deactivation_hookse activa cuando desactivamos un complemento y se register_uninstall_hookactiva cuando queremos remove/deletenuestro complemento.

Utilice este código si solo tiene 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 tiene más de dos tablas, entonces use 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/

Gufran Hasan
fuente
Gracias salva mi día :)
Arman H
0

Si está utilizando "WORDPRESS PLUGIN BOILERPLATE GENERATOR" wppb

ir a incluye \ class -...- deactivator.php

y escriba el siguiente código (modifíquelo según sus necesidades)

global $wpdb;

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

Gracias

Arman H
fuente
-1

Sé que hay un gancho llamado: register_deactivation_hookque puedes usar para hacer cosas cuando el complemento está desactivado. Eche un vistazo a la documentación y vea si es lo que está buscando.

Por ejemplo:

**register_deactivation_hook**(__FILE__, 'sm_deactivation');
function myplugin_deactivation(){
/*
     Stuff
*/}
Luca Marzi
fuente
-3

Desafortunadamente, WordPress no expone la funcionalidad para hacer eso. Solo es compatible con el gancho register_uninstall_hook. Se llama a este enlace cuando el usuario hace clic en el enlace de desinstalación que solicita que el complemento se desinstale. El enlace no estará activo a menos que el complemento se enganche a la acción. ver http://codex.wordpress.org/Function_Reference/register_uninstall_hook

y el gancho register_deactivation_hook. Lo que hace la mayoría de los desarrolladores de complementos es agregar una casilla de verificación a la tabla de configuración con el uso de get_option, update_option. Cuando esta opción está marcada, los datos se eliminan.

De esta manera, la desactivación temporal no restablece la tabla de opciones de su complemento.

Arevico
fuente