文章列表搜索框输入 ISBN 9787,明明有 12 篇匹配,结果页显示“没有找到结果”,搜标题却能正常出结果。日志里能对上时间点,这种反而好排。
pre_get_posts 里给搜索挂了 meta_query,外层默认是 AND,内层又写 relation 为 OR,两个条件互相排斥。查询还沿用了默认的 post_status,草稿里的匹配被排除。这一点先确认清楚,后面就不用反复试。
$q->set('meta_query', [
'relation' => 'OR',
['key' => 'isbn', 'value' => $term, 'compare' => 'LIKE'],
['key' => 'author', 'value' => $term, 'compare' => 'LIKE'],
]);
围绕「后台搜索自定义字段」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。
日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。权限不要一口气开到最大,先加到够用再往上试,范围小才好收。
把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。
处理上按这个顺序:只在 is_admin 且 is_search 时挂 meta_query;把 relation 写在同一个数组层级 别嵌套两层;打印 $query->request 看生成的 SQL。
结果对不对很好判断,搜 ISBN 出 12 条,搜作者名也能命中,搜标题的结果数量不变。
