卸载WordPress插件是如何工作的?

时间:2013-05-26 作者:Wern Ancheta

我试图在用户卸载插件时删除数据库表。但是卸载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插件页面上只能看到activatedelete 当前停用插件时的链接。然后deactivateedit 链接(如果当前处于活动状态)。Where\'s uninstall? 我已经尝试了删除链接,但除了删除整个插件文件夹外,它似乎什么都没有做,数据库表仍然完好无损。

1 个回复
最合适的回答,由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 卸载发生时。

结束

相关推荐