卸载方法

当您卸载插件时,可能需要对卸载的插件进行一些清理。

如果用户已停用该插件,然后单击WordPress管理员中的删除链接,则会将插件视为已卸载。

当您的插件被卸载时,您将需要清除插件特定的任何插件选项和/或设置,和/或其他数据库实体(如表)。经验不足的开发人员有时会使用停用挂钩的错误。此表说明了停用和卸载之间的区别。

Scenario Deactivation Hook Uninstall Hook
Flush Cache/Temp Yes No
Flush Permalinks Yes No
Remove Options from {$wpdb->prefix}_options No Yes
Remove Tables from wpdb No Yes

方法1:register_uninstall_hook

要设置卸载挂钩,请使用 register_uninstall_hook() 函数:

register_uninstall_hook(__FILE__, 'pluginprefix_function_to_run');

方法2:uninstall.php

要使用此方法,您需要在插件的根文件夹中创建一个uninstall.php文件。 当用户删除插件时,这个魔术文件会自动运行。

例如: /plugin-name/uninstall.php

警报:使用uninstall.php时,在执行前,插件应该始终检查常量WP_UNINSTALL_PLUGIN以防止直接访问。

该常量将由WordPress在uninstall.php调用期间定义。当 register_uninstall_hook() 执行卸载时,常量不被定义。以下是删除选项条目并删除数据库表的示例:

// if uninstall.php is not called by WordPress, die
if (!defined('WP_UNINSTALL_PLUGIN')) {
    die;
}
 
$option_name = 'wporg_option';
 
delete_option($option_name);
 
// for site options in Multisite
delete_site_option($option_name);
 
// drop a custom database table
global $wpdb;
$wpdb->query("DROP TABLE IF EXISTS {$wpdb->prefix}mytable");

注意:在多站点中,通过所有博客循环删除选项可能非常耗资源。

下一节:以下是一些最佳做法来帮助组织您的代码,使其与WordPress核心和其他WordPress插件一起工作良好。