If you need to manage translatable content on pages that ACF can’t target directly (like archive pages), ACF Options Pages are the solution. On a Polylang multilingual site, you need each options page to store separate values per language.
Archive pages are “virtual pages” and don’t exist under Pages in the WordPress dashboard.
This guide shows how to create per-language options pages and retrieve the correct field values based on the current language.
Plugin alternative: The ACF Options For Polylang plugin (10,000+ installs) handles this automatically by storing language-specific values in the database. The manual approach below gives you full control without an extra plugin.
Adding an ACF Options Page to a Polylang Site
To add the same Options Page for each of the languages defined in Polylang, add the following code to the functions.php file:
if (function_exists('acf_add_options_page')) {
// Main Theme Settings Page
acf_add_options_page();
$parent = acf_add_options_page(array(
'page_title' => 'Archive General Settings',
'menu_title' => 'Archive Settings',
'redirect' => 'Archive Settings',
));
$languages = array('cn', 'en');
//
// Language Specific Options
// Translatable options specific languages. e.g., social profiles links
//
foreach ($languages as $lang) {
acf_add_options_sub_page(array(
'page_title' => 'Options (' . strtoupper($lang) . ')',
'menu_title' => __('Options (' . strtoupper($lang) . ')', 'text-domain'),
'menu_slug' => "options-${lang}",
'post_id' => $lang,
'parent' => $parent['menu_slug']
));
}
}On line 11, define the language codes for each language in Polylang. You can find these codes under Languages > Languages in the WordPress dashboard.
Tip: Instead of hardcoding languages, you can detect them dynamically using pll_languages_list(). Replace line 11 with: $languages = pll_languages_list(); This way, adding a new language in Polylang automatically creates its options page.

After adding the code, you will see the language-specific options in the WordPress admin:

Next, create a new field group and set its Location to the options page:

After adding fields, the populated options pages will look like this:

Fetching Fields of the Options Page Based on the Relevant Language
To retrieve the correct field values for the current language, pass pll_current_language('slug') as the second parameter to any ACF function:
<?php $image = get_field('image', pll_current_language('slug')); ?>Or, for instance, when calling a Repeater Field:
<?php if (have_rows('my_repeater_field', pll_current_language('slug'))) : ?>
<?php while (have_rows('my_repeater_field', pll_current_language('slug'))) : the_row(); ?>Make sure to wrap
pll_current_language()calls in afunction_exists()check if the code might run on a site without Polylang installed.
FAQs
Summary
Making ACF Options Pages work with Polylang requires creating separate sub-pages for each language and using the language slug as the post_id. When retrieving fields in your templates, pass pll_current_language('slug') as the second parameter to any ACF function.
For a more automated approach, consider using pll_languages_list() to dynamically detect languages, or the ACF Options For Polylang plugin for a zero-code solution.

