You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 16:21:30