搜索框什么都不填直接回车,页面把全站几百篇文章都列出来,底部还能一直往后翻页,翻不到头。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,s 参数为空时主查询退化成普通列表查询,模板里没有提前做判断,空条件被当成无条件使用,等于把整站的内容都列了一遍。

「空搜索查询」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。

$kw = trim(get_search_query());
if ($kw === '') {
  get_template_part('parts/empty');
  return;
}

权限不要一口气开到最大,先加到够用再往上试,范围小才好收。把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。

具体做法是,先判断关键词去掉首尾空格之后是不是空字符串;为空就直接输出提示模板,后面的查询全部跳过;别让空的 s 参数进入主查询,提前在模板这一层拦掉。

最后用这个标准收尾,空关键词只显示提示文案,不再把全站文章列出来,也不会生成分页。

作者 9823189