删除插件时从数据库中删除表


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
2014年

谢谢您的答复..是的..我尝试了..什么都没有发生..:/
Zzuum

Answers:


23

您可以使用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");
?>

删除插件后,将调用此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_hook挂钩而不是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

转到includes \ class -...- deactivator.php

并编写以下代码(请根据需要进行修改)

global $wpdb;

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

谢谢



-3

不幸的是,WordPress没有公开实现该功能的功能。它仅支持register_uninstall_hook挂钩。当用户单击要求插件自行卸载的卸载链接时,将调用此挂钩。除非插件挂接到操作中,否则该链接不会处于活动状态。参见http://codex.wordpress.org/Function_Reference/register_uninstall_hook

和register_deactivation_hook挂钩。大多数插件开发人员所做的就是使用get_option,update_option在设置表中添加一个复选框。选中此选项后,将删除数据。

这样,临时停用不会重置插件的选项表。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.