阅读提示
本文约 785 字,预计阅读 2 分钟。文中命令与配置均经过实测,可直接参考执行。
本文约 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 属性建索引过滤。
常见坑
- 插件搜索过滤被自定义查询覆盖,混结果。
- 搜索框不带语言参数,跨语言查。
- 案例:某站自定义搜索没加语言,英文页搜出中文。加
pre_get_posts语言条件后纯净。 - 多语言插件没开搜索过滤,需后台勾。
- ElasticPress 索引没 language 字段,过滤失效。
总结
判断标准:当前语言搜索只返本语言结果。行动清单:确认插件搜索过滤 → 自定义查询加语言 → 大站用 Algolia 建 language 索引。详见多语言自定义文章类型翻译。
觉得有用?点个赞支持一下
标签:
# Algolia
# pre_get_posts
# WordPress 搜索多语言
# 分语言
# 分语言搜索
# 多语言站内搜索
# 搜索结果语言过滤
# 搜索隔离
# 站内搜索
# 过滤
