Excluir tabelas do banco de dados ao excluir o plug-in

13

Eu criei um plug-in e quero adicionar uma função para excluir minhas tabelas do banco de dados quando um usuário excluir meu plug-in. Criei uma função que exclui tabelas do banco de dados quando um usuário desativa meu plug-in, mas não quero isso. Aqui está o 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 você pode ver, essa função exclui tabelas quando o plug-in está desativado, mas preciso fazer isso quando o plug-in é excluído.

Zzuum
fonte
Você já tentou o register_uninstall_hook ?
Andrew Bartel
Obrigado pela resposta .. sim .. eu tentar isso .. nada happend ..: /
Zzuum

Respostas:

23

Você pode fazer isso usando o suporte do 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 arquivo uninstall.php é chamado quando seu plugin é excluído.

johnh10
fonte
8

Entre com o código aqui:

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

fonte
2

Você precisa usar register_uninstall_hookhook em vez de register_deactivation_hookexcluir tabelas do banco de dados.

register_deactivation_hooké acionado quando desativamos um plug-in e é register_uninstall_hookacionado quando queremos remove/deletenosso plug-in.

Por favor, use este código se você tiver apenas uma tabela:

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 você tiver mais de duas tabelas, 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');

Links de referência:

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

Gufran Hasan
fonte
Obrigado salvar meu dia :)
Arman H
0

Se você estiver usando "WORDPRESS PLUGIN BOILERPLATE GENERATOR" wppb

vá para includes \ class -...- deactivator.php

e escreva o código a seguir (modifique-o conforme suas necessidades)

global $wpdb;

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

obrigado

Arman H
fonte
-1

Eu sei que existe esse gancho chamado: register_deactivation_hookque você pode usar para fazer coisas quando o plug-in está desativado. Dê uma olhada na documentação e veja se é o que você está procurando.

Por exemplo:

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

Infelizmente, o WordPress não expõe a funcionalidade para fazer isso. Ele suporta apenas o gancho register_uninstall_hook. Esse gancho é chamado quando o usuário clica no link de desinstalação que solicita a desinstalação do plug-in. O link não estará ativo a menos que o plug-in seja conectado à ação. consulte http://codex.wordpress.org/Function_Reference/register_uninstall_hook

e o gancho register_deactivation_hook. O que a maioria dos desenvolvedores de plug-ins faz é adicionar uma caixa de seleção à tabela de configuração com o uso de get_option, update_option. Quando esta opção está marcada, os dados são removidos.

Dessa forma, a desativação temporária não redefine a tabela de opções do seu plugin.

Arevico
fonte