WordPress使用Polylang插件时如何检测页面或文章的语言
Polylang双语站点语言判断功能实现
- 不需要直接读取
postmeta表的_locale字段,也不需要直接查询term_taxonomy表的语言分类数据。Polylang本身提供了可直接调用的公共API获取语言信息,直接查表属于硬编码实现:一方面会绕过插件内置的缓存机制,增加不必要的数据库查询开销;另一方面Polylang不同版本会调整语言存储逻辑,后续插件升级后你的判断代码可能直接失效,在子目录/多域名多语言模式、语言Cookie回退等场景下还容易出现判断结果错误。
你要的三个便捷判断函数可以直接复制到当前主题的functions.php文件中,调用逻辑和WordPress原生的is_archive()、is_singular()等判断函数完全一致,自动覆盖文章页、静态页、归档页、搜索页、404页、分类标签页等所有站点页面场景:
/** * 判断当前页面是否为英文(en_US)版本 * @return bool */ function is_en() { if (!function_exists('pll_current_language')) { return false; } return pll_current_language('locale') === 'en_US'; } /** * 判断当前页面是否为德文(de_DE)版本 * @return bool */ function is_de() { if (!function_exists('pll_current_language')) { return false; } return pll_current_language('locale') === 'de_DE'; } /** * 通用语言判断函数 * @param string $lang 支持传短标识(如en/de)或完整locale格式(如en_US/de_DE) * @return bool */ function lang_is($lang) { if (!function_exists('pll_current_language')) { return false; } $param = strpos($lang, '_') !== false ? 'locale' : 'slug'; return pll_current_language($param) === $lang; }
如果你需要判断某篇指定ID的文章/页面所属语言,而不是当前全局访问的页面语言,可以直接调用Polylang内置的pll_get_post_language()函数,示例:
// 获取ID为36的文章的语言locale值 $post_lang = pll_get_post_language(36, 'locale'); // 判断该文章是否为德文 $is_de_post = $post_lang === 'de_DE';
上述代码已经加了Polylang插件存在性校验,就算插件临时被禁用也不会触发PHP致命错误,兼容性更强。后续如果站点新增其他语言,既可以参照
is_en()的格式新增对应判断函数,也可以直接用通用的lang_is()函数做判断,不需要额外写重复逻辑。
内容的提问来源于stack exchange,提问作者Krechet USA
相关产品推荐
相关产品推荐

