[Resolved] Migrating translations of Posts to Custom Post Types
This thread is resolved. Here is a description of the problem and solution.
Problem: The client is attempting to convert posts into custom post types (CPT) based on their categories, ensuring that translations remain attached and old permalinks redirect to the new ones. They encountered issues where not all translations transferred during the migration using WPCLI. Solution: We recommend disabling the WPML plugin initially to ensure all posts are correctly converted to the new CPT without language complications. Once this is done, re-enable WPML and manually connect the posts as translations. This can be done either through the WPML interface or programmatically using the
Please note that this solution might be outdated or not applicable to your specific case. We highly recommend checking related known issues at https://wpml.org/known-issues/, verifying the version of the permanent fix, and confirming that you have installed the latest versions of themes and plugins. If the issue persists, please open a new support ticket for further assistance.
This is the technical support forum for WPML - the multilingual WordPress plugin.
Everyone can read, but only WPML clients can post here. WPML team is replying on the forum 6 days per week, 22 hours per day.
Background of the issue:
We are trying to convert posts into custom post types based on their categories, optionally mapping certain categories and tags to new terms in new taxonomies associated with the new post types. For example, all 'blog' category posts become the 'Article' post type, and if they have the post tag 'ipv-therapy', they are assigned to the new 'Product Line' taxonomy term of 'ipv'. We need to ensure all translations attached to posts also convert and stay attached. We need to ensure the old permalinks are redirected to the new permalinks, in case users have bookmarks or links in emails, etc. We have tried some export/import plugins, post type switcher, and then our own WPCLI function. We have some success migrating the original posts, but not all translations transfer along with them. We are able to provide our CLI code if needed.
Symptoms:
Not all translations transfer along with the original posts during migration.
Questions:
How do we effectively convert posts to custom posts along with translations?
How can we ensure all translations attached to posts convert and stay attached?
How can we ensure the old permalinks are redirected to the new permalinks?
What I suggest first is to disable WPML plugin, and make sure that all posts are correctly converted to your new CPT. When WPML is disabled they will all appear in the same language.
We're still struggling with using the WP CLI to query posts and apply the "wpml_set_element_language_details" hook.
There seem to be many complicating factors like whether or not that post type has translations enabled in the WPML setting ahead of time; whether or not the translation is complete, or if the post or translation are drafts.
I'm wondering if there is a known way to migrate posts with their translations to a new post type.
If we disable WPML then switch all our posts to the new post type and then enable WPML how are we supposed to reconnect translations manually? Are we expected to have a spreadsheet with the Post IDs for the Original and Translations?
Anyway, this has been a very challenging thing to sort out and we could use assistance.
I am afraid there is no official way from WPML or anything else we can recommend. This is more of a WP thing than WPML. As said, the WPML part is that you need to connect them as translation via hook suggested.
As advised before, you should first just migrate your posts from one CPT to another without WPML, then enable WPML and via our PHP hook adjust the posts language information and its translation of.
You can also do that manually as explained in the docs shared before, you will need to go edit the translated post, set the correct language for it, and then set that this is a translation of (correct default language post)
I am afraid there is no other way I can suggest, or am aware. From the WPML side, if you have issues with the hook or it is not working correctly, or you are not sure how to connect translation, we can try to help and advise, but note we can not write custom code or custom solutions for you, that is out of scope of our support. For that kind of work, you can hire a WPML Contractor: https://wpml.org/contractors/