PHPackages                             pleb/acf-polylang-translatable-fields - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Localization &amp; i18n](/categories/localization)
4. /
5. pleb/acf-polylang-translatable-fields

ActiveWordpress-plugin[Localization &amp; i18n](/categories/localization)

pleb/acf-polylang-translatable-fields
=====================================

Adds translatable fields to ACF for non-translated contents using Polylang

1.1.1(1y ago)218MITPHPPHP &gt;=5.4

Since Apr 19Pushed 1y ago1 watchersCompare

[ Source](https://github.com/PierreLebedel/AcfPolylangTranslatableFields)[ Packagist](https://packagist.org/packages/pleb/acf-polylang-translatable-fields)[ Docs](https://github.com/PierreLebedel/AcfPolylangTranslatableFields)[ RSS](/packages/pleb-acf-polylang-translatable-fields/feed)WikiDiscussions main Synced 3w ago

READMEChangelog (2)Dependencies (1)Versions (12)Used By (0)

ACF Polylang Translatable Field
===============================

[](#acf-polylang-translatable-field)

This plugin adds some translatable fields to ACF for non-translated contents using Polylang

The problem
-----------

[](#the-problem)

When using Polylang, each translatable post is duplicated, and that the one that matches to the users's language is displayed. The custom fields have to be filled for each post translation.

And when using [qTanslate-XT](https://github.com/qtranslate/qtranslate-xt), the post is not duplicate, but that's the field whitch get all translated values internally.

Sometimes, we want some duplicable post types, and some non-duplicable post types with translatable fields.

The solution
------------

[](#the-solution)

This plugin add some fields types to the ACF choices, and when the post form is submitted, that's the field himself whitch got all translated values. Internally, the values are saved with a **qTranslate-like HTML comment format** :

```
English contentContenu en Français

```

When filling in the fields, a tab will be displayed for each Polylang configured languages :

[![content editing languages tabs](https://github.com/PierreLebedel/AcfPolylangTranslatableFields/raw/main/screenshots/screenshot-post-tabs-01.png?raw=true)](https://github.com/PierreLebedel/AcfPolylangTranslatableFields/blob/main/screenshots/screenshot-post-tabs-01.png?raw=true)

Installation
------------

[](#installation)

- Download and unzip the package file to your `wp-content/plugins/` directory
- Or install with Composer : `composer require pleb/acf-polylang-translatable-fields`

Usage
-----

[](#usage)

### Register fields

[](#register-fields)

You have to choose your field type from the **Polylang translatable** group inside the ACF field type select box.

Each field type presents an additionational option, witch let you decide the empty translated value field behavior. You can choose between returning the empty value (like there is saved), and returning the default site language value instead.

### Get values in your templates

[](#get-values-in-your-templates)

The ACF `get_field()` function returns to you the translated value in your current context Polylang language.

```
// pll_current_language('locale') => fr_FR
$translation = get_field('acf_field_name', $post_id);
echo $translation; // "Contenu en Français"

```

This function can take a **boolean third parameter** to allow you to get non-formatted values. In this case, you will receive an associative array of your field translations :

```
$translations = get_field('acf_field_name', $post_id, false);
print_r($translations);
// array(
//   'en_EN' => "English content",
//   'fr_FR' => "Contenu en Français"
// );

```

### Update values

[](#update-values)

You can update a translated field from outside of the box by sending your values inside an associative array within ACF `update_field` function :

```
update_field('acf_field_name', array(
    'fr_FR' => "Nouveau contenu en Français"
), $post_id);

```

The posted values will be merged with the others languages values.

Note your can also send your values with the 2 chars language slug instead of the 5 chars language locale :

```
update_field('acf_field_name', array(
    'en' => "New english content",
    'fr' => "Nouveau contenu en Français"
), $post_id);

```

If you send non-array value to the `update_field` function, it is only the **current context Polylang language** (or the default site language if not applicable) that will be updated :

```
// 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);

```

###  Health Score

29

—

LowBetter than 57% of packages

Maintenance36

Infrequent updates — may be unmaintained

Popularity9

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity54

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~130 days

Recently: every ~324 days

Total

11

Last Release

597d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/3717168?v=4)[Pierre Lebedel](/maintainers/PierreLebedel)[@PierreLebedel](https://github.com/PierreLebedel)

---

Top Contributors

[![PierreLebedel](https://avatars.githubusercontent.com/u/3717168?v=4)](https://github.com/PierreLebedel "PierreLebedel (11 commits)")

---

Tags

wordpresswordpress pluginpolylangacfadvanced custom fields

### Embed Badge

![Health badge](/badges/pleb-acf-polylang-translatable-fields/health.svg)

```
[![Health](https://phpackages.com/badges/pleb-acf-polylang-translatable-fields/health.svg)](https://phpackages.com/packages/pleb-acf-polylang-translatable-fields)
```

###  Alternatives

[helsingborg-stad/municipio

A bootstrap theme for creating municipality sites.

4028.5k10](/packages/helsingborg-stad-municipio)[wp-media/wp-rocket

Performance optimization plugin for WordPress

7531.3M3](/packages/wp-media-wp-rocket)[qtranslate/qtranslate-xt

qTranslate-XT (eXTended): Adds user-friendly multilingual content support, stored in single post.

60136.2k](/packages/qtranslate-qtranslate-xt)[hellonico/acf-country

A country field for ACF.

12196.8k](/packages/hellonico-acf-country)[grappler/polylang-slug

Allows same slug for multiple languages in Polylang

29912.9k](/packages/grappler-polylang-slug)[log1x/acf-editor-palette

A replica Gutenberg color picker field for Advanced Custom Fields.

101308.4k](/packages/log1x-acf-editor-palette)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
