pleb / acf-polylang-translatable-fields
使用 Polylang 为未翻译内容添加 ACF 可翻译字段
Requires
- php: >=5.4
- composer/installers: ~1.0
README
此插件通过 Polylang 为未翻译内容添加一些可翻译字段到 ACF
问题
当使用 Polylang 时,每个可翻译帖子都会被重复,并且匹配用户语言的那一个会显示出来。自定义字段需要为每个帖子翻译填写。
当使用 qTranslate-XT 时,帖子不会被重复,但是是那个字段内部获取所有翻译值。
有时,我们希望某些帖子类型可以重复,某些帖子类型则不可重复但有可翻译字段。
解决方案
此插件向 ACF 选择中添加了一些字段类型,当提交帖子表单时,该字段本身将获得所有翻译值。内部,值以 qTranslate-like HTML 注释格式 保存。
<!--:en_US-->English content<!--:--><!--:fr_FR-->Contenu en Français<!--:-->
填写字段时,将显示每个 Polylang 配置语言的选项卡
安装
-
下载并解压缩包文件到您的
wp-content/plugins/
目录 -
或者使用 Composer 安装:
composer require pleb/acf-polylang-translatable-fields
使用方法
注册字段
您必须从 ACF 字段类型选择框中的 Polylang 可翻译 组中选择您的字段类型。
每个字段类型都有一个附加选项,让您决定空翻译值字段的行为。您可以选择返回空值(就像保存的那样),或者返回默认站点语言值。
在模板中获取值
ACF 的 get_field()
函数会返回您当前上下文 Polylang 语言中的翻译值。
// pll_current_language('locale') => fr_FR
$translation = get_field('acf_field_name', $post_id);
echo $translation; // "Contenu en Français"
此函数可以接受一个 布尔第三个参数 以允许您获取非格式化值。在这种情况下,您将收到一个包含您的字段翻译的关联数组。
$translations = get_field('acf_field_name', $post_id, false);
print_r($translations);
// array(
// 'en_EN' => "English content",
// 'fr_FR' => "Contenu en Français"
// );
更新值
您可以通过将值放在 ACF update_field
函数中的关联数组中来从框外更新翻译字段
update_field('acf_field_name', array(
'fr_FR' => "Nouveau contenu en Français"
), $post_id);
提交的值将与其他语言的值合并。
注意,您也可以使用 2 个字符的语言缩写而不是 5 个字符的语言区域
update_field('acf_field_name', array(
'en' => "New english content",
'fr' => "Nouveau contenu en Français"
), $post_id);
如果您向 update_field
函数发送非数组值,则只会更新 当前上下文 Polylang 语言(或如果不适用,则更新默认站点语言)
// pll_current_language('locale') => es_ES
update_field('acf_field_name', "Contenido en español", $post_id);
// do the same
update_field('acf_field_name', array(
'es_ES' => "Contenido en español"
), $post_id);