Contributors: Teemu Suoranta
Tags: polylang, media, attachments, translations
License: GPLv2 or later
Polylang Translate existing media is an add-on for the multilingual WordPress plugin Polylang. This add-on let's you bulk translate and replace all existing media in content, featured image and meta fields you enable translations in media. This plugin is based on my other Polylang plugin polylang-copy-content.
When to use:
- When turning existing site to multi-lingual
- When enabling media translations when you already have media uploaded and added to content
Basic feature list:
- Translate all media (images and galleries) that are inside content, meta fields and featured image
- Takes care all post types (that are not 'attachment', 'revision', 'acf-field', 'acf-field-group', 'nav_menu_item', 'polylang_mo')
- Image translations are linked automatically
- You can add your own custom fields that have image IDs
- You can translate medias in custom fields via regex (useful for ACF Fields like repeater or flexible content)
- Uses Polylang's functions, no messing around
This is open source and I cannot give you any guarantees, though it has worked for me in many projects. Please, report issues and contribute!
How-to use (takes around 5 minutes):
- Take a backup of your database
- Download plugin and activate (you will need Polylang active)
- Enable Media translations in Polylang Settings
- Set all content without language to default language from "Languages" admin page
- Click "1. Translate the whole media library" from the admin notice
- Click through steps (50 posts at a time). Each step will take some time.
- Click "2. Translate existing images in content" from the admin notice
- Click through steps (50 posts at a time). Each step will take some time.
- Deactivate and delete plugin when you have gone through all the steps
Composer:
$ composer aucor/polylang-translate-existing-media
With composer.json:
{
"require": {
"aucor/polylang-translate-existing-media": "*"
},
"extra": {
"installer-paths": {
"htdocs/wp-content/plugins/{$name}/": ["type:wordpress-plugin"]
}
}
}
Add your own custom fields that have images saved as IDs:
function prefix_custom_fields_to_translate($custom_fields) {
// return keys of your custom fields with image id
return array(
'my_custom_image_field',
'other_custom_image_field'
);
}
add_filter( 'polylang-translate-existing-media-custom-fields-with-image-id', 'prefix_custom_fields_to_translate' );
Add your own custom fields with a regex that have images saved as IDs:
(useful for ACF custom fields in a repeater or flexible-content field)
add_filter( 'polylang-translate-existing-media-custom-fields-regex-with-image-id', function($regex) {
return "/^[^_](?:.*?)(?:benefits_image|preview_image|image|preview_image|facts_image|logo)$/";
});
Issues:
(No known issues, yet)
To-do:
- Include terms and their custom fields
- Replacing count might be off, make it more informative
- Add filter for translating all custom fields of a post with regex
- PHP 7.2. compatibility
- New Feature: Translate whole media library
- New Feature: API for custom_fields that save the image as ID
- New Feature: Add filter to excluded post types
polylang-translate-existing-media-skip-post-types
- Improvement: Include all post_status
- Bugfix: Don't copy featured image, just translate the existing one