pleb/acf-polylang-translatable-fields

使用 Polylang 为未翻译内容添加 ACF 可翻译字段

1.0.9 2021-05-03 14:38 UTC

This package is auto-updated.

Last update: 2024-09-22 20:01:18 UTC


README

此插件通过 Polylang 为未翻译内容添加一些可翻译字段到 ACF

问题

当使用 Polylang 时,每个可翻译帖子都会被重复,并且匹配用户语言的那一个会显示出来。自定义字段需要为每个帖子翻译填写。

当使用 qTranslate-XT 时,帖子不会被重复,但是是那个字段内部获取所有翻译值。

有时,我们希望某些帖子类型可以重复,某些帖子类型则不可重复但有可翻译字段。

解决方案

此插件向 ACF 选择中添加了一些字段类型,当提交帖子表单时,该字段本身将获得所有翻译值。内部,值以 qTranslate-like HTML 注释格式 保存。

<!--:en_US-->English content<!--:--><!--:fr_FR-->Contenu en Français<!--:-->

填写字段时,将显示每个 Polylang 配置语言的选项卡

content editing languages tabs

安装

  • 下载并解压缩包文件到您的 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);