WordPress插件卸载时如何正确清理及处理许可证停用失败通知?
WordPress插件卸载流程优化:处理许可证停用失败的问题
针对你遇到的卸载阶段无法处理许可证停用错误的问题,核心解决思路是捕获错误并通过可靠渠道记录/通知,同时保证后续清理流程不受影响,具体方案如下:
1. 捕获WP错误并记录到日志
卸载阶段无法使用插件的前端通知方法,但可以将错误信息写入WordPress系统日志,方便后续排查。通过try-catch包裹许可证停用方法,捕获抛出的WP_Error并记录:
2. 确保清理流程的鲁棒性
即使许可证停用失败,也要继续执行后续的自定义选项删除、角色清理等操作,避免残留数据。
修改后的完整代码
static function uninstall_plugin(): void { if ( ! defined( 'WP_UNINSTALL_PLUGIN' ) ) { exit; } // 清理用户元数据与角色(修正拼写错误:çlient → client) $users = get_users(); foreach ($users as $user){ delete_user_meta($user->ID,'booking'); $user->remove_role('client'); } // 加载许可证类并尝试停用 require_once plugin_dir_path( __FILE__ ) . 'includes/Licence.php'; try { Licence::__deactivate(); } catch (WP_Error $e) { // 将错误写入WordPress日志 error_log( sprintf('插件卸载时许可证停用失败:%s', $e->get_error_message()) ); // 可选:若需用户知晓,可临时存错误到选项(但插件卸载后文件会被删除,日志更可靠) // update_option('my_plugin_uninstall_error', $e->get_error_message()); } // 执行数据库卸载 require_once plugin_dir_path( __FILE__ ) . 'admin/Database.php'; Database::uninstall(); // 移除自定义角色 remove_role('client'); remove_role('my-plugin-manager'); // 删除自定义选项(包括许可证密钥相关设置) delete_option("my-plugin-option"); // 若许可证密钥存于单独选项,需额外删除 // delete_option("my-plugin-license-key"); }
补充说明
- 日志查看:可通过WordPress后台「工具→站点健康→信息→服务器」找到日志文件路径,或直接查看服务器PHP错误日志。
- 临时通知备选:若一定要让用户知晓错误,可在捕获错误后将信息存入临时选项,再在插件主文件中添加
admin_notices钩子检测显示,但插件卸载后文件会被删除,仅用户再次安装时能看到,因此日志仍是更优选择。 - 路径修正:若
uninstall.php位于插件根目录,plugin_dir_path(__FILE__)比plugin_dir_path(dirname(__FILE__))更准确,避免路径层级错误。
内容的提问来源于stack exchange,提问作者Narrim
相关产品推荐
相关产品推荐

