Xóa bảng khỏi cơ sở dữ liệu khi xóa plugin


13

Tôi đã tạo một plugin và muốn thêm một chức năng để xóa các bảng của mình khỏi cơ sở dữ liệu khi người dùng xóa plugin của tôi. Tôi đã tạo một chức năng xóa các bảng khỏi DB khi người dùng hủy kích hoạt plugin của tôi, nhưng tôi không muốn điều đó. Đây là mã:

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

Như bạn có thể thấy, chức năng này xóa các bảng khi plugin bị vô hiệu hóa, nhưng tôi cần phải làm điều đó khi plugin bị xóa.


Bạn đã thử register_uninstall_hook chưa?
Andrew Bartel

Cảm ơn bạn đã trả lời .. vâng .. tôi thử điều đó .. không có gì xảy ra ..: /
Zzuum

Câu trả lời:


23

Bạn có thể làm điều này bằng cách sử dụng hỗ trợ 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");
?>

Tập tin Uninstall.php này được gọi khi plugin của bạn bị xóa.


8

Nhập mã vào đây:

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

2

Bạn cần sử dụng register_uninstall_hookhook thay vì register_deactivation_hookxóa các bảng khỏi cơ sở dữ liệu.

register_deactivation_hookkích hoạt khi chúng tôi hủy kích hoạt một plugin và register_uninstall_hookkích hoạt khi chúng tôi muốn remove/deleteplugin của chúng tôi.

Vui lòng sử dụng mã này nếu bạn chỉ có một bảng:

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

Nếu bạn có nhiều hơn hai bảng thì bạn sử dụng mã này:

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

Liên kết tham khảo:

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


Cảm ơn hãy tiết kiệm trong ngày của tôi :)
Arman

0

Nếu bạn đang sử dụng "MÁY PHÁT ĐIỆN BOILERPLATE"

đi tới bao gồm \ class -...- deac activator.php

và viết mã sau đây (sửa đổi theo nhu cầu của bạn)

global $wpdb;

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

Cảm ơn


-1

Tôi biết rằng có cái móc này được gọi là: register_deactivation_hookbạn có thể sử dụng để làm công cụ khi plugin bị vô hiệu hóa. Hãy xem tài liệu và xem nếu đó là những gì bạn đang tìm kiếm.

Ví dụ:

**register_deactivation_hook**(__FILE__, 'sm_deactivation');
function myplugin_deactivation(){
/*
     Stuff
*/}

-3

Thật không may, WordPress không tiết lộ chức năng để làm điều đó. Nó chỉ hỗ trợ hook register_uninstall_hook. Móc này được gọi khi người dùng nhấp vào liên kết gỡ cài đặt yêu cầu plugin tự gỡ cài đặt. Liên kết sẽ không hoạt động trừ khi plugin kết nối hành động. xem http://codex.wordpress.org/Function_Reference/register_uninstall_hook

và hook register_deac activate_hook. Điều mà hầu hết các nhà phát triển plugin làm là thêm một hộp kiểm vào bảng cài đặt với việc sử dụng get_option, update_option. Khi tùy chọn này được chọn, dữ liệu sẽ bị xóa.

Bằng cách này, việc hủy kích hoạt tạm thời không đặt lại bảng tùy chọn của plugin của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.