如何基于Polylang判断WordPress页面语言并切换ACF字段
Polylang多语言ACF字段切换实现方案及代码修正
代码错误修正
你写的判断代码核心问题是变量引用漏写了$符号,同时可以优化Polylang语言判断的逻辑,修正后的基础判断代码如下:
<?php // 获取当前语言代码,无值时取默认语言 $lang_code = pll_current_language() ?: pll_default_language(); // 判断是否为西班牙文 if ($lang_code == 'es') : ?> 西班牙文测试内容 <?php else : ?> 英文默认内容 <?php endif; ?>
注:
??是PHP7+的空合并运算符,但pll_current_language()在未获取到语言时会返回默认语言,用?:更贴合场景,也兼容更多PHP版本。
ACF字段切换实现方案
假设你为英文设置的ACF字段名为sidebar_contact_text,西班牙文对应字段为sidebar_contact_text_es,可以按以下方式在sidebar.php/footer.php中实现切换:
单字段切换示例(sidebar.php中)
<?php $lang_code = pll_current_language() ?: pll_default_language(); // 根据语言选择对应ACF字段 $contact_text = $lang_code == 'es' ? get_field('sidebar_contact_text_es') : get_field('sidebar_contact_text'); // 输出字段内容 if ($contact_text) { echo '<p>' . esc_html($contact_text) . '</p>'; } ?>
多字段批量处理(更高效)
如果有多个ACF字段需要切换,可以封装成函数,在主题的functions.php中添加:
function get_localized_acf_field($field_name) { $lang_code = pll_current_language() ?: pll_default_language(); // 西班牙文字段后缀为_es,可根据需求调整 $localized_field = $lang_code == 'es' ? "{$field_name}_es" : $field_name; return get_field($localized_field); }
然后在sidebar.php/footer.php中直接调用:
<?php // 获取联系文本 $contact_text = get_localized_acf_field('sidebar_contact_text'); // 获取地址文本 $address_text = get_localized_acf_field('sidebar_address_text'); if ($contact_text) echo '<p>' . esc_html($contact_text) . '</p>'; if ($address_text) echo '<p>' . esc_html($address_text) . '</p>'; ?>
备选方案:加载不同PHP文件
如果后续需要更复杂的结构差异,也可以通过语言判断加载不同的模板文件:
<?php $lang_code = pll_current_language() ?: pll_default_language(); // 加载对应语言的sidebar模板 if ($lang_code == 'es') { get_template_part('template-parts/sidebar', 'es'); } else { get_template_part('template-parts/sidebar', 'default'); } ?>
需提前创建
sidebar-es.php和sidebar-default.php文件放在主题的template-parts目录下。
内容的提问来源于stack exchange,提问作者Mrich
相关产品推荐
相关产品推荐

