ลบตารางจากฐานข้อมูลเมื่อลบปลั๊กอิน


13

ฉันสร้างปลั๊กอินและต้องการเพิ่มฟังก์ชั่นเพื่อลบตารางของฉันออกจากฐานข้อมูลเมื่อผู้ใช้ลบปลั๊กอินของฉัน ฉันสร้างฟังก์ชันที่ลบตารางออกจากฐานข้อมูลเมื่อผู้ใช้ปิดการใช้งานปลั๊กอินของฉัน แต่ฉันไม่ต้องการ นี่คือรหัส:

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

อย่างที่คุณเห็นฟังก์ชั่นนี้จะลบตารางเมื่อปลั๊กอินถูกปิดการใช้งาน แต่ฉันต้องทำอย่างนั้นเมื่อปลั๊กอินถูกลบ


คุณลองregister_uninstall_hook แล้วหรือยัง?
Andrew Bartel

ขอบคุณสำหรับคำตอบ .. ใช่ .. ฉันลองทำ .. ไม่มีอะไรเกิดขึ้น .. : /
Zzuum

คำตอบ:


24

คุณสามารถทำได้โดยใช้การถอนการติดตั้ง WordPress สนับสนุน PHP:

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

ไฟล์ uninstall.php นี้เรียกว่าเมื่อปลั๊กอินของคุณถูกลบ


8

ใส่รหัสที่นี่:

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

คุณต้องใช้register_uninstall_hookhook แทนregister_deactivation_hookการลบตารางออกจากฐานข้อมูล

register_deactivation_hookไฟไหม้เมื่อเราปิดการใช้งานปลั๊กอินและregister_uninstall_hookไฟเมื่อเราต้องการremove/deleteปลั๊กอินของเรา

กรุณาใช้รหัสนี้หากคุณมีเพียงหนึ่งตาราง:

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

หากคุณมีมากกว่าสองตารางคุณจะต้องใช้รหัสนี้:

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

ลิงค์อ้างอิง:

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


ขอบคุณบันทึกประจำวันของฉัน :)
Arman H

0

หากคุณใช้ "WORDPRESS PLUGIN BOILERPLATE GENERATOR" wppb

ไปที่รวม \ class -...- deactivator.php

และเขียนรหัสต่อไปนี้ (แก้ไขโปรดตามความต้องการของคุณ)

global $wpdb;

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

ขอบคุณ


-1

ฉันรู้ว่ามีเบ็ดนี้เรียกว่า: register_deactivation_hookคุณสามารถใช้เพื่อทำสิ่งเมื่อปลั๊กอินถูกปิดการใช้งาน ลองดูเอกสารประกอบและดูว่าเป็นสิ่งที่คุณต้องการหรือไม่

ตัวอย่างเช่น

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

-3

น่าเสียดายที่ WordPress ไม่ได้แสดงฟังก์ชั่นการใช้งาน รองรับเฉพาะ register_uninstall_hook hook เท่านั้น เบ็ดนี้จะถูกเรียกเมื่อผู้ใช้คลิกที่ลิงค์ถอนการติดตั้งที่เรียกร้องให้ถอนการติดตั้งปลั๊กอิน ลิงก์จะไม่สามารถใช้งานได้เว้นแต่ปลั๊กอินจะอยู่ในการดำเนินการ ดูhttp://codex.wordpress.org/Function_Reference/register_uninstall_hook

และ register_deactivation_hook hook สิ่งที่นักพัฒนาปลั๊กอินส่วนใหญ่ทำคือเพิ่มช่องทำเครื่องหมายลงในตารางการตั้งค่าโดยใช้ get_option, update_option เมื่อเลือกตัวเลือกนี้ข้อมูลจะถูกลบออก

วิธีนี้การปิดใช้งานชั่วคราวจะไม่รีเซ็ตตารางตัวเลือกของปลั๊กอิน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.