我试图在用户卸载插件时删除数据库表。但是卸载WordPress插件到底意味着什么呢?
还有停用挂钩和卸载挂钩。然后是uninstall.php
文件
在插件类的构造函数上,我有卸载挂钩:
register_uninstall_hook(__FILE__, array($this, \'uninstall_housekeeping\'));
然后
uninstall_housekeeping
方法具有以下代码:
public function uninstall_housekeeping(){
global $wpdb;
$tweets_table = $wpdb->prefix . \'zam_tweets\';
require_once ABSPATH . \'wp-admin/includes/upgrade.php\';
dbDelta("DROP TABLE $tweets_table");
}
根据wordpress codex,您需要
uninstall.php
文件,其中包含卸载插件时将执行的代码,因此我还将此代码放入:
if (!defined(\'WP_UNINSTALL_PLUGIN\'))
exit();
global $wpdb;
$tweets_table = $wpdb->prefix . \'zam_tweets\';
require_once ABSPATH . \'wp-admin/includes/upgrade.php\';
dbDelta("DROP TABLE $tweets_table");
但我在WordPress插件页面上只能看到
activate
和
delete
当前停用插件时的链接。然后
deactivate
和
edit
链接(如果当前处于活动状态)。
Where\'s uninstall
? 我已经尝试了删除链接,但除了删除整个插件文件夹外,它似乎什么都没有做,数据库表仍然完好无损。
最合适的回答,由SO网友:brasofilo 整理而成
正如我在问题的评论中所解释的,错误当然在于DROP TABLE
正在执行。但是,如何卸载WordPress插件呢:
如果我们register_uninstall_hook
在我们的插件中,回调存储在选项中uninstall_plugins
在里面/wp-includes/plugin.php
.
$uninstallable_plugins[plugin_basename($file)] = $callback;
update_option(\'uninstall_plugins\', $uninstallable_plugins);
在函数的PHPDoc中
register_uninstall_hook
我们有:
如果存在此文件,则在卸载过程中将绕过卸载挂钩调用它。
旁路发生在/wp-admin/includes/plugin.php
:
define(\'WP_UNINSTALL_PLUGIN\', $file);
include WP_PLUGIN_DIR . \'/\' . dirname($file) . \'/uninstall.php\';
return true;
因此,无论您在卸载挂钩或文件中有什么,它都应该自己工作。如果有,
it will work 卸载发生时。