英文页面顶部搜索框输入关键词,结果列表里中文文章和英文文章混在一起,翻两页都找不到想要的那篇。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

add_action('pre_get_posts', function ($q) {
  if ($q->is_search()) {
    $q->set('lang', pll_current_language());
  }
});

搜索查询没有带上当前语言条件,默认按全站文章检索,语言分类在搜索主查询里被整个忽略,两种语言的结果自然混在一起。这一点先确认清楚,后面就不用反复试。

碰到「多语言搜索串语言」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。

改完隔一天再看一次,当场正常不代表能稳住。

具体做法是,给搜索的主查询附加上当前语言这个筛选条件;确认搜索结果里的分类和标签也都按语言过滤;测试没有结果的时候会不会错误回退到其他语言。

改完照着核一遍,英文站的搜索只返回英文的结果 翻页的数量也都能对得上。

作者 9823189