如何编写 MU 插件强制禁用冲突插件进行紧急排查?

文章导读
编写 MU 插件强制禁用冲突插件的核心是在 `wp-content/mu-plugins/` 目录下创建 PHP 文件,利用 `option_active_plugins` 过滤器清空激活列表。该方法适用于网站白屏、后台无法访问等紧急场景,风险在于代码语法错误可能导致全站不可用,排查后需立即删除文件。
📋 目录
  1. 快速处理思路
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
  7. 参考来源
A A

编写 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 插件可以通过过滤器拦截该选项的读取过程。即使后台无法登录,只要服务器文件可写,就能通过此方法切断冲突插件的加载路径,为修复争取时间。

分步处理

  1. 通过 SFTP 或 SSH 连接服务器,进入 WordPress 根目录。
  2. 检查 `wp-content/mu-plugins/` 目录是否存在,不存在则创建,权限设置为 755。
  3. 新建文件 `emergency-disable.php`,写入过滤代码并保存。
  4. 刷新网站页面,若白屏消失则说明冲突插件已被禁用。
  5. 登录后台修复具体冲突问题后,必须删除该 MU 插件文件以恢复普通插件功能。

怎么验证是否生效

查看后台“插件”页面,所有普通插件应显示为未激活状态,但 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/