编写 MU 插件强制禁用冲突插件的核心是在 `wp-content/mu-plugins/` 目录下创建 PHP 文件,利用 `option_active_plugins` 过滤器清空激活列表。该方法适用于网站白屏、后台无法访问等紧急场景,风险在于代码语法错误可能导致全站不可用,排查后需立即删除文件。
先说结论:通过 MU 插件挂钩 `option_active_plugins` 过滤器是无需数据库操作即可临时禁用所有普通插件的最快方案。
- 先确认:服务器文件读写权限正常,且能访问 `wp-content/mu-plugins/` 目录。
- 先处理:创建 MU 插件文件并写入过滤代码,强制返回空数组以禁用普通插件。
- 再验证:刷新网站前台和后台,确认冲突插件已停止加载且站点恢复访问。
快速处理思路
直接创建以下 PHP 文件上传至服务器,无需登录后台即可生效。
<?php
/*
Plugin Name: Emergency Disable Plugins
*/
add_filter('option_active_plugins', '__return_empty_array');为什么会这样
MU 插件的加载优先级高于普通插件,且在初始化早期执行。
WordPress 在加载普通插件前会读取 `active_plugins` 选项,MU 插件可以通过过滤器拦截该选项的读取过程。即使后台无法登录,只要服务器文件可写,就能通过此方法切断冲突插件的加载路径,为修复争取时间。
分步处理
- 通过 SFTP 或 SSH 连接服务器,进入 WordPress 根目录。
- 检查 `wp-content/mu-plugins/` 目录是否存在,不存在则创建,权限设置为 755。
- 新建文件 `emergency-disable.php`,写入过滤代码并保存。
- 刷新网站页面,若白屏消失则说明冲突插件已被禁用。
- 登录后台修复具体冲突问题后,必须删除该 MU 插件文件以恢复普通插件功能。
怎么验证是否生效
查看后台“插件”页面,所有普通插件应显示为未激活状态,但 MU 插件列表会显示该紧急文件。
检查网站前台是否正常加载,同时查看 `wp-content/debug.log` 确认不再有冲突插件相关的致命错误。
常见坑
- 忘记删除文件:排查结束后未删除 MU 插件,导致所有普通插件无法重新激活。
- 缓存干扰:对象缓存或页面缓存可能保留旧的插件列表,需清空缓存后再验证。
- 语法错误:PHP 代码少写分号或括号会导致全站白屏,上传前需在本地验证语法。
常见问题
这个操作会删除插件数据吗?
不会,该操作仅禁用插件加载,数据库中的插件选项和数据表保持不变。
如何恢复被禁用的插件?
删除 `wp-content/mu-plugins/emergency-disable.php` 文件后,刷新页面即可恢复原有插件状态。
MU 插件本身会被禁用吗?
不会,MU 插件加载顺序优先,该过滤代码运行后其他普通插件才被跳过,MU 插件不受影响。
参考来源
- WordPress Developer Handbook, Must-Use Plugins, https://developer.wordpress.org/plugins/must-use-plugins/