这个主题有点问题!

前面刚用一个开源主题建立了网站,今天写文章就发现保存不了。这里记录一下解决过程,毫无疑问,AI占大头,我只是它小老弟😂,这里有个小技巧,让AI排查问题时,最好是提示它一步一步排查,不然它会一股脑输出所有可能存在的问题,信息太多接受不了。

问题初现

事情是这样的:新建的WordPress网站突然无法保存草稿了,每次点击"保存草稿"按钮,页面就提示更新失败;浏览器控制台还报出一堆CSS文件404和500的错误,像这样:

忘记截图了,大概就这么些报错:

/index.php?rest_route=%2Fwp%2Fv2%2Fposts%2F61&_locale=user:1   Failed to load resource: the server responded with a status of 500 ()

GET /wp-includes/css/dist/block-library/editor.min.css?ver=6.8.2 404
GET /wp-includes/css/classic-themes.min.css?ver=6.8.2 404

查了文件夹和文件泉下也没问题。

第一步:查看错误日志

我直接把Nginx错误日志甩给AI,发现了关键线索:

PHP Fatal error: Uncaught TypeError: call_user_func_array(): Argument #1 ($callback) must be a valid callback, function "_return_false" not found or invalid function name

看到这个错误,我很懵逼。qwen告诉我:WordPress有个内置函数叫__return_false(注意是两个下划线),但这里却在找_return_false(只有一个下划线)!这就是典型的拼写错误。

第二步:确认问题范围

我们做了个简单测试:禁用所有插件(wp网站后台或网站目录改插件目录名称都可以)。但问题依然存在!这说明问题不在插件上。

接着我们更换了主题,嘿,保存草稿功能恢复正常了!这就基本确定问题出在原主题上。

第三步:深入排查主题问题

最后我在整个主题目录搜索:

grep -r "_return_false" /www/wwwroot/actorus/wp-content/themes/your-theme/

最终,确实找到了这个,改完,保存,确实可以了,不过这个主题人家没维护了,也没办法。

第四步:解决CSS 404问题

虽然保存草稿功能恢复了,但CSS文件404的问题还在。我们开始排查:

  1. 确认文件存在 ✅
  2. 检查文件权限(644)✅
  3. 查看Nginx配置

在Nginx配置中,我们发现了问题所在:

#SECURITY-START 防盗链配置
location ~ .*\.(jpg|jpeg|gif|png|js|css)$
{
    expires      30d;
    access_log /dev/null;
    valid_referers www.actorus.top actorus.top;
    if ($invalid_referer){
       return 404;
    }
}
#SECURITY-END

这段配置本意是防盗链,但它太严格了!WordPress编辑器(在/wp-admin/post-new.php)尝试加载CSS文件时,Nginx认为这是"无效引用",直接返回404。

第五步:修复Nginx配置

我们尝试修改配置,但第一次改错了,导致Nginx配置测试失败:

conflicting parameter "www.actorus.top" in /www/server/nginx/conf/nginx.conf:102

Nginx不接受*.actorus.top这样的写法。最后,我直接按照如下改写:

valid_referers none blocked server_names;

这个配置让Nginx自动识别server_name中定义的所有域名(我定义的是www.actorus.topactorus.top),既解决了语法错误,又能正确允许来自自己网站的引用。

总结经验

  1. 保存草稿失败:很可能是主题中错误使用了_return_false(单下划线)而不是__return_false(双下划线),当然具体情况具体分析
    • 解决方法:在整个主题目录搜索_return_false并修正
  2. CSS文件404:可能是Nginx防盗链配置太严格
    • 解决方法:修改valid_referersnone blocked server_names

小贴士

  1. 主题开发注意事项:记住WordPress核心函数中,__return_false__return_true都有两个下划线!少一个下划线就会出大问题。
  2. Nginx配置技巧:防盗链配置要谨慎,特别是对WordPress后台功能有影响。如果不确定,可以先注释掉相关配置测试。
  3. 排查顺序:遇到问题先看错误日志,然后按"插件→主题→服务器配置"的顺序排查,效率最高。