Ștergerea tabelelor din baza de date la dezinstalarea plugin-ului
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.

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.

Citește și: https://devnote.in/delete-tables-from-the-database-when-deactivating-a-plugin/

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

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/

Ș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
*/}

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

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.
