当您卸载插件时,可能需要对卸载的插件进行一些清理。
如果用户已停用该插件,然后单击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插件一起工作良好。