Hapus tabel dari database saat menghapus plugin

13

Saya membuat plugin dan ingin menambahkan fungsi untuk menghapus tabel saya dari database ketika pengguna menghapus plugin saya. Saya membuat fungsi yang menghapus tabel dari DB ketika pengguna menonaktifkan plugin saya, tetapi saya tidak menginginkannya. Ini kodenya:

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

Seperti yang Anda lihat, fungsi ini menghapus tabel ketika plugin dinonaktifkan, tetapi saya perlu melakukan itu ketika plugin dihapus.

Zzuum
sumber
Sudahkah Anda mencoba register_uninstall_hook ?
Andrew Bartel
Terima kasih atas jawabannya .. ya .. saya coba itu .. tidak ada yang terjadi ..: /
Zzuum

Jawaban:

23

Anda dapat melakukan ini menggunakan dukungan uninstall.php WordPress:

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

File uninstall.php ini dipanggil saat plugin Anda dihapus.

johnh10
sumber
8

Masukkan kode di sini:

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

sumber
2

Anda perlu menggunakan register_uninstall_hookhook alih-alih register_deactivation_hookmenghapus tabel dari database.

register_deactivation_hookkebakaran ketika kita menonaktifkan sebuah plugin dan register_uninstall_hookmemecat ketika kita ingin remove/deleteplugin kita.

Silakan gunakan kode ini jika Anda hanya memiliki satu 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');

Jika Anda memiliki lebih dari dua tabel maka Anda menggunakan kode ini:

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

Tautan Referensi:

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

Gufran Hasan
sumber
Terima kasih selamatkan hari saya :)
Arman H
0

Jika Anda menggunakan "GENERATOR BOILERPLATE PLUGIN WORDPRESS PLUG" wppb

masuk ke include \ class -...- deactivator.php

dan tulis kode berikut (ubahlah sesuai kebutuhan Anda)

global $wpdb;

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

Terima kasih

Arman H
sumber
-1

Saya tahu ada kait yang disebut ini: register_deactivation_hookyang dapat Anda gunakan untuk melakukan hal-hal ketika plugin dinonaktifkan. Lihatlah dokumentasi dan lihat apakah itu yang Anda cari.

Contohnya:

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

Sayangnya, WordPress tidak mengekspos fungsionalitas untuk melakukan itu. Ini hanya mendukung hook register_uninstall_hook. Hook ini dipanggil saat pengguna mengklik tautan uninstall yang meminta plugin untuk menghapus instalannya sendiri. Tautan tidak akan aktif kecuali plugin terhubung ke tindakan. lihat http://codex.wordpress.org/Function_Reference/register_uninstall_hook

dan kait register_deactivation_hook. Apa yang dilakukan sebagian besar pengembang plugin adalah menambahkan kotak centang ke tabel pengaturan dengan menggunakan get_option, update_option. Ketika opsi ini dicentang, data dihapus.

Dengan cara ini, penonaktifan sementara tidak menyetel ulang tabel opsi plugin Anda.

Arevico
sumber