WordPress 升级插件、换主题、装新插件之后,前台突然打不开,显示一行小字「此站点正遇到技术困难」(There has been a critical error on your website)。别慌——这是 WordPress 5.2+ 自带的 fatal error recovery mode,相当于给你留了一扇应急逃生门。
critical error 到底什么意思
WP 把页面生成过程中「PHP 跑挂了、不能继续往下走」的致命错误抓出来,主动停了流程,避免给访客一个白屏或半截 HTML。它通过 wp_die() 替代了原来的白屏行为,输出更友好的提示。
第一步:去邮箱找恢复链接
WordPress 会自动给「设置 → 常规」里填的管理员邮箱发一封信,标题类似「Your Site is Experiencing a Technical Issue」。里面有一个特殊链接,长这样:
https://yourdomain.com/wp-login.php?action=enter_recovery_mode&token=xxxxx
这个 token 24 小时内有效。点进去直接登录后台——这时 WordPress 自动暂停了出错的插件或主题,让你能在干净的环境里操作。
第二步:进后台看错误详情
登录后会看到顶部一个明显的红色横幅:「One or more plugins/theme failed to load properly. …You can deactivate them here.」点过去,WP 会告诉你:
| 报错项 | 典型原因 | 处理方式 |
|---|---|---|
| 插件 X 报错 | 新版本不兼容 PHP 8.x | 暂停 + 等待作者更新 |
| 主题 functions.php | 自定义代码语法错 | 切回旧主题 + 修代码 |
| 内存耗尽 | Allowed memory size exhausted | 调高 WP_MEMORY_LIMIT |
| 致命语法错 | Parse error: syntax error | FTP 改回上一个能跑的版本 |
第三步:开 debug 看根因
恢复模式下看到的报错信息可能还不够细。在 wp-config.php 里加:
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
再去前台触发一次(刷新一次页面),/wp-content/debug.log 末尾会写下完整堆栈:哪个文件、哪一行、调用栈一路上的函数。把 Fatal error 那行粘出来搜一下,几乎都能找到对应的解决方案。修完记得关掉 debug:
define('WP_DEBUG', false);
第四步:FTP 收尾
恢复链接过期了?邮箱收不到(被反垃圾拦了)?直接走 FTP:
1. 进入 wp-content/plugins/,把怀疑的插件文件夹改个名,比如 akismet → akismet_disabled
2. 同样进入 wp-content/themes/,把当前主题改个名
3. 刷新前台,如果错误消失,就是这个插件或主题的问题;再依次回滚、启用排查
常见问题
Q:没收到恢复邮件怎么办?
A:先检查「设置 → 常规」里的管理员邮箱是不是真的能收到(很多客户填了早年不再用的邮箱)。然后在 wp-config.php 里手动加 define('RECOVERY_MODE_COOKIE', '随便一串'); 强制启用。如果还是不发,多半是主机屏蔽了 wp_mail(),直接走 FTP 第四步。
Q:recovery mode 进去了,但功能不全怎么办?
A:recovery mode 只停用了出错的那一项,其他插件都在。但为了安全起见,避免再触发 fatal error,先停用可疑的全部插件、回到默认主题,再逐个开启排查。
Q:Fatal error 和 500 Internal Server Error 有什么区别?
A:500 是 Nginx/Apache 在请求层捕获的服务器错误,可能根本看不到 WP;Fatal error 是 WP 自己捕获的 PHP 错误,至少能看到「技术困难」的提示,能进 recovery mode 处理。两者经常并发——500 查不出来时打开 debug 看 Fatal error 那一行就是根因。
critical error 是 WordPress 给站长兜底的一道防线,平时被这层保护挡住的故障,照上面四步一般 10 分钟内就能定位。如果按 debug.log 的报错信息搜不出原因,可以把那一段贴到 fenij.com 留言里,我帮你接着分析。