Ștergerea tabelelor din baza de date la dezinstalarea plugin-ului

21 nov. 2014, 23:38:01
Vizualizări: 51.2K
Voturi: 19

Am creat un plugin și vreau să adaug o funcție pentru a șterge tabelele mele din baza de date când un utilizator șterge plugin-ul meu. Am creat o funcție care șterge tabelele din baza de date când un utilizator dezactivează plugin-ul meu, dar nu asta îmi doresc. Iată codul:

// Șterge tabelul la dezactivare
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' );

După cum puteți vedea, această funcție șterge tabelele când plugin-ul este dezactivat, dar am nevoie să fac acest lucru când plugin-ul este șters.

2
Comentarii

Ai încercat register_uninstall_hook?

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

Mulțumesc pentru răspuns.. da.. am încercat asta.. nu s-a întâmplat nimic.. :/

x-y-z-select x-y-z-select
22 nov. 2014 00:44:40
Toate răspunsurile la întrebare 6
2
30

Puteți face acest lucru folosind suportul pentru uninstall.php din WordPress:

<?php
    if( ! defined( 'WP_UNINSTALL_PLUGIN' ) ) exit();
    global $wpdb;
    $wpdb->query( "DROP TABLE IF EXISTS NestoNovo" );
    delete_option("my_plugin_db_version");
?>

Acest fișier uninstall.php este apelat atunci când plugin-ul dvs. este șters.

20 dec. 2014 17:29:28
Comentarii

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

Aceasta este o variantă puțin mai bună

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

Introdu codul aici:

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 apr. 2017 14:39:05
1

Trebuie să folosești hook-ul register_uninstall_hook în loc de register_deactivation_hook pentru a șterge tabelele din baza de date.

register_deactivation_hook se declanșează când dezactivăm un plugin iar register_uninstall_hook se declanșează când vrem să eliminăm/ștergem pluginul nostru.

Te rog folosește acest cod dacă ai doar un singur tabel:

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');

Dacă ai mai mult de două tabele, atunci folosește acest cod:

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-uri de referință:

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

25 mar. 2019 15:32:09
Comentarii

Mulțumesc, mi-ai salvat ziua :)

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

Știu că există un hook numit: register_deactivation_hook pe care îl poți folosi pentru a face anumite acțiuni când plugin-ul este dezactivat. Aruncă o privire în documentație și vezi dacă este ceea ce cauți.

De exemplu:

**register_deactivation_hook**(__FILE__, 'sm_deactivation');
function myplugin_deactivation(){
/*
     Acțiuni personalizate
*/}
19 sept. 2016 10:47:31
1
-1

Dacă folosești "WORDPRESS PLUGIN BOILERPLATE GENERATOR" wppb

mergi la includes\class-...-deactivator.php

și scrie următorul cod (modifică-l conform nevoilor tale)

global $wpdb;

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

Mulțumesc

24 mar. 2020 08:43:41
Comentarii

dezinstalarea/ștergerea și dezactivarea nu sunt același lucru. uneori doriți să dezactivați pluginul fără a distruge toate datele pe care le-a colectat.

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

Din păcate, WordPress nu oferă funcționalitatea pentru a face acest lucru direct. Acesta acceptă doar hook-ul register_uninstall_hook. Acest hook este apelat când utilizatorul face clic pe link-ul de dezinstalare care solicită eliminarea pluginului. Link-ul nu va fi activ decât dacă pluginul este înregistrat pentru acest hook. vezi http://codex.wordpress.org/Function_Reference/register_uninstall_hook

și hook-ul register_deactivation_hook. Ce fac majoritatea dezvoltatorilor de plugin-uri este să adauge o casetă de bifat în tabelul de setări folosind get_option, update_option. Când această opțiune este bifată, datele sunt șterse.

Astfel, dezactivarea temporară nu va reseta tabelul de opțiuni al pluginului tău.

22 nov. 2014 17:30:41