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

时间:2014-11-21 作者:svukovic

我创建了一个插件,并希望添加一个函数,以便在用户删除我的插件时从数据库中删除我的表。我创建了一个函数,当用户停用我的插件时,可以从DB中删除表,但我不希望这样。代码如下:

// 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\' );
正如你所看到的,这个函数在插件被停用时删除表,但我需要在插件被删除时这样做。

5 个回复
最合适的回答,由SO网友:johnh10 整理而成

您可以使用WordPress卸载来完成此操作。php支持:

<?php
    if( ! defined( \'WP_UNINSTALL_PLUGIN\' ) ) exit();
    global $wpdb;
    $wpdb->query( "DROP TABLE IF EXISTS NestoNovo" );
    delete_option("my_plugin_db_version");
?>
此卸载。删除插件时会调用php文件。

SO网友:Gufran Hasan

您需要使用register_uninstall_hook 钩子代替register_deactivation_hook 从数据库中删除表。

register_deactivation_hook 当我们停用插件并register_uninstall_hook 想开枪就开枪remove/delete 我们的插件。

Please use this code if you have only one table:

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

If you have more than two tables then you use this code:

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/

SO网友:Arman H

如果您使用的是“WORDPRESS插件样板生成器”wppb

转到包括\\类--停用器。php

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

global $wpdb;

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

SO网友:Luca Marzi

我知道有个钩子叫:register_deactivation_hook 当插件被停用时,您可以使用它来执行操作。看一下文档,看看它是否是您想要的。

例如:

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

SO网友:Arevico

不幸的是,WordPress并没有为此公开功能。它只支持register\\u uninstall\\u挂钩。当用户单击要求插件卸载自身的卸载链接时,就会调用此挂钩。除非插件挂接到操作中,否则链接不会处于活动状态。看见http://codex.wordpress.org/Function_Reference/register_uninstall_hook

和register\\u deactivation\\u hook hook。大多数插件开发人员所做的是使用get\\u选项、update\\u选项在设置表中添加一个复选框。选中此选项后,将删除数据。

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

结束

相关推荐

无法在多站点上查看网络plugins.php或upgrade-core.php

我有一个有5或6个站点的网络。在网络管理面板中,我可以看到除/wp admin/network/plugins之外的所有页面。php页面和/wp admin/network/upgrade核心。php页面。查看文件夹结构时,这两个文件都存在,但由于某些原因,它们不会加载。非常感谢您的帮助。