搜索全站
multilingual 2 分钟阅读

多语言站点的站内搜索问题:分语言搜索的实现

多语言站站内搜索常把各语言结果混在一起,讲清如何让搜索只返回当前语言内容:插件原生支持、按语言 meta 过滤、或换搜索方案(ElasticPress/Algolia)的实现。

U
UFO_PF 2024-02-28 · 阅读 2 分钟
多语 MULTILINGUAL
阅读提示
本文约 785 字,预计阅读 2 分钟。文中命令与配置均经过实测,可直接参考执行。

引言:搜中文出了一堆英文

用户在中文站搜”备份”,结果里混着英文 backup 文章,体验差。默认 WP 搜索不带语言维度,需让搜索查询带”当前语言”过滤。

原理分析:搜索为什么混

WP 搜索只查 wp_posts 的 post_title/post_content,不区分语言(除非内容用 qTranslate 标签共存)。多语言插件把语言存在 taxonomy/icl 表,需在搜索 SQL 里 JOIN 语言条件。

保姆级实操

WPML/Polylang 通常已让前台搜索按当前语言过滤(它们 hook pre_get_posts 加语言条件)。确认:

// 若自定义搜索,手动加语言条件(以 taxonomy language 为例)
add_action( 'pre_get_posts', function ( $q ) {
    if ( $q->is_search() && ! is_admin() ) {
        $q->set( 'language', pll_current_language() ); // Polylang
    }
} );

大站换 Algolia/ElasticPress,按 language 属性建索引过滤。

常见坑

  1. 插件搜索过滤被自定义查询覆盖,混结果。
  2. 搜索框不带语言参数,跨语言查。
  3. 案例:某站自定义搜索没加语言,英文页搜出中文。加 pre_get_posts 语言条件后纯净。
  4. 多语言插件没开搜索过滤,需后台勾。
  5. ElasticPress 索引没 language 字段,过滤失效。

总结

判断标准:当前语言搜索只返本语言结果。行动清单:确认插件搜索过滤 → 自定义查询加语言 → 大站用 Algolia 建 language 索引。详见多语言自定义文章类型翻译。

U
UFO_PF作者

专注 WordPress 生态的实战作者,内容以「可复制、可验证」为第一原则。

留下你的想法

邮箱地址不会被公开。带 * 的为必填项。