How to Fix Polylang Post Type Translation Issue
(Only the First Post Is Translatable)
A common issue when using Polylang in WordPress is that a custom post type appears translatable, but only the first post shows the translation option, while all other posts:
-
Have no language selector
-
Show no “+” icon for translation
-
Cannot be translated via Bulk Edit
Even worse, all Polylang settings may look correct, making this problem confusing for many users.
❌ Why This Happens
This issue is not caused by:
-
ACF settings
-
REST API configuration
-
Polylang post type settings
The real reason is simple:
👉 Only the first post actually has a Polylang language assigned in the database.
The remaining posts were usually:
-
Created before Polylang was installed
-
Duplicated using a clone/duplicate plugin
-
Imported from XML or CSV
As a result, Polylang does not recognize them as multilingual posts.
✅ The Definitive Fix (Works 100%)
You must manually assign a language to all existing posts in that post type.
Add the following code temporarily to your functions.php file:
add_action('init', function () {
if (!function_exists('pll_set_post_language')) {
return;
}
$posts = get_posts([
'post_type' => 'service',
'posts_per_page' => -1,
'post_status' => 'any',
'lang' => ''
]);
foreach ($posts as $post) {
pll_set_post_language($post->ID, 'en'); // default site language
}
});
🔹 After refreshing the admin panel:
-
All posts will have a language assigned
-
The translation “+” icon will appear for every post
⚠️ Important:
Remove this code immediately after the issue is fixed.
✅ Final Result
Once the language is assigned:
-
Every post in the custom post type becomes translatable
-
The Polylang language column appears correctly
-
The “only first post is translatable” issue is fully resolved
🔒 How to Prevent This Issue in the Future
-
Always create posts after Polylang is installed
-
Avoid duplicating posts before assigning a language
-
Use Polylang’s built-in “+” translation button
-
Assign a language immediately when creating new posts
Conclusion
If only the first post of a custom post type is translatable in Polylang, the problem is missing language data, not plugin misconfiguration.
Assigning the language programmatically is the fastest and most reliable solution.


