{"id":297915,"date":"2026-04-15T20:17:01","date_gmt":"2026-04-15T20:17:01","guid":{"rendered":"https:\/\/en-ca.wordpress.org\/plugins\/translatepress-import-sync\/"},"modified":"2026-05-08T19:49:40","modified_gmt":"2026-05-08T19:49:40","slug":"oli-import-sync-for-translatepress","status":"publish","type":"plugin","link":"https:\/\/ky.wordpress.org\/plugins\/oli-import-sync-for-translatepress\/","author":14492344,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"3.16.0","stable_tag":"3.16.0","tested":"6.9.4","requires":"5.0","requires_php":"7.4","requires_plugins":null,"header_name":"Oli Import Sync for TranslatePress","header_author":"Olivier Bigras","header_description":"Sync translations from WP All Import into TranslatePress via the official Custom API. Map _trp_title_[lang] and _trp_content_[lang] custom fields in your import. Not affiliated with TranslatePress.","assets_banners_color":"2d2d2d","last_updated":"2026-05-08 19:49:40","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/olivierbigras.com\/","header_author_uri":"https:\/\/olivierbigras.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":121,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"3.14.0":{"tag":"3.14.0","author":"bigrat95","date":"2026-04-15 20:16:44"},"3.15.0":{"tag":"3.15.0","author":"bigrat95","date":"2026-05-08 19:15:01"},"3.16.0":{"tag":"3.16.0","author":"bigrat95","date":"2026-05-08 19:49:40"}},"upgrade_notice":{"3.16.0":"<p>Auto-derived translated slugs now mirror WordPress&#039;s <code>-2<\/code>, <code>-3<\/code> disambiguator from the EN slug, fixing cases where TranslatePress would alter trailing numbers in titles (e.g. &quot;304&quot; -&gt; &quot;305&quot;).<\/p>","3.15.0":"<p>Adds translated post \/ product slug support. Auto-derive slugs from translated titles, or set them explicitly via <code>_trp_slug_[lang]<\/code>. Requires SEO Pack.<\/p>","3.14.0":"<p>Plugin renamed to &quot;Oli Import Sync for TranslatePress&quot; (trademark-friendly). No breaking changes for imports.<\/p>","3.13.0":"<p>Strip all paragraph breaks into one text block. Translation always matches regardless of paragraph count.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3507454,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3507454,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3507460,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3507460,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["3.14.0","3.15.0","3.16.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3507423,"resolution":"1","location":"assets","locale":"","width":1376,"height":768},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3507423,"resolution":"2","location":"assets","locale":"","width":1376,"height":768}},"screenshots":{"1":"Admin notice showing available custom fields","2":"WP All Import custom field mapping","3":"Translations synced in TranslatePress"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[99,195341,2333,286,4623],"plugin_category":[45,48],"plugin_contributors":[],"plugin_business_model":[],"class_list":["post-297915","plugin","type-plugin","status-publish","hentry","plugin_tags-multilingual","plugin_tags-translatepress","plugin_tags-translation","plugin_tags-woocommerce","plugin_tags-wp-all-import","plugin_category-ecommerce","plugin_category-language-tools","plugin_committers-bigrat95"],"banners":{"banner":"https:\/\/ps.w.org\/oli-import-sync-for-translatepress\/assets\/banner-772x250.png?rev=3507460","banner_2x":"https:\/\/ps.w.org\/oli-import-sync-for-translatepress\/assets\/banner-1544x500.png?rev=3507460","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/oli-import-sync-for-translatepress\/assets\/icon-128x128.png?rev=3507454","icon_2x":"https:\/\/ps.w.org\/oli-import-sync-for-translatepress\/assets\/icon-256x256.png?rev=3507454","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/oli-import-sync-for-translatepress\/assets\/screenshot-1.png?rev=3507423","caption":"Admin notice showing available custom fields"},{"src":"https:\/\/ps.w.org\/oli-import-sync-for-translatepress\/assets\/screenshot-2.png?rev=3507423","caption":"WP All Import custom field mapping"}],"raw_content":"<!--section=description-->\n<p><strong>Oli Import Sync for TranslatePress<\/strong> lets you import multilingual content directly into TranslatePress when using WP All Import. Ideal for bulk-importing products, posts, or any content that already has translations in your CSV\/XML.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li><strong>Title, Content &amp; Excerpt<\/strong> - Import translated titles, descriptions, and excerpts<\/li>\n<li><strong>Post \/ Product Slugs<\/strong> - Import or auto-derive translated post and product slugs from the translated title (requires SEO Pack)<\/li>\n<li><strong>WooCommerce Categories<\/strong> - Import translated category names and slugs<\/li>\n<li><strong>WooCommerce Attributes<\/strong> - Import translated attribute values (colors, sizes, etc.)<\/li>\n<li><strong>Variation Descriptions<\/strong> - Import translated variation descriptions<\/li>\n<li><strong>Variable Products<\/strong> - Full support for WooCommerce variable products and variations<\/li>\n<li><strong>Multiple Languages<\/strong> - Import all your languages simultaneously<\/li>\n<li><strong>Human Reviewed Status<\/strong> - Translations are saved as \"Human Reviewed\" (status 2) so auto-translation will not overwrite them<\/li>\n<li><strong>Automatic Paragraph Stripping<\/strong> - Paragraph breaks are flattened into a single text block so TranslatePress always matches one string per description<\/li>\n<\/ul>\n\n<h4>Requirements<\/h4>\n\n<ul>\n<li>WP All Import Pro<\/li>\n<li>TranslatePress Multilingual<\/li>\n<li>TranslatePress Custom API plugin (provided by TranslatePress support)<\/li>\n<li>TranslatePress SEO Pack (optional, for slug translations)<\/li>\n<\/ul>\n\n<h4>How It Works<\/h4>\n\n<ol>\n<li>Map your default language fields normally in WP All Import.<\/li>\n<li>Add custom fields for translated content (e.g., <code>_trp_title_fr_CA<\/code>).<\/li>\n<li>Run the import \u2014 translations are automatically synced to TranslatePress.<\/li>\n<li>Temporary custom fields are cleaned up after import.<\/li>\n<\/ol>\n\n<h4>Disclaimer<\/h4>\n\n<p>This is an unofficial integration plugin. \"TranslatePress\" is a trademark of Cozmoslabs and is referenced here only for compatibility purposes. This plugin is developed independently and is not endorsed by, sponsored by, or affiliated with Cozmoslabs.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>oli-import-sync-for-translatepress<\/code> folder to <code>\/wp-content\/plugins\/<\/code><\/li>\n<li>Activate the plugin through the 'Plugins' menu in WordPress<\/li>\n<li>Ensure TranslatePress and TranslatePress Custom API are also active<\/li>\n<li>Configure your import in WP All Import with the translation custom fields<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"what%20custom%20fields%20should%20i%20use%3F\"><h3>What custom fields should I use?<\/h3><\/dt>\n<dd><p><strong>For posts\/products:<\/strong>\n* <code>_trp_title_[lang]<\/code> - Translated title\n* <code>_trp_content_[lang]<\/code> - Translated content\/description\n* <code>_trp_excerpt_[lang]<\/code> - Translated excerpt (optional)\n* <code>_trp_slug_[lang]<\/code> - Translated post\/product slug (optional, requires SEO Pack). If empty and \"Auto-derive post slug from translated title\" is enabled, the slug is built from <code>_trp_title_[lang]<\/code>.<\/p>\n\n<p><strong>For WooCommerce categories:<\/strong>\n* <code>_trp_cat_[lang]<\/code> - Translated category names (pipe-separated)\n* <code>_trp_cat_slug_[lang]<\/code> - Translated category slugs (requires SEO Pack)<\/p>\n\n<p><strong>For WooCommerce variation descriptions:<\/strong>\n* <code>_variation_description<\/code> - Default language variation description (standard WooCommerce field)\n* <code>_trp_variation_desc_[lang]<\/code> - Translated variation description<\/p>\n\n<p><strong>For WooCommerce attributes:<\/strong>\n* <code>_trp_attr_[attribute-slug]_[lang]<\/code> - Translated attribute values (pipe-separated)<\/p>\n\n<p>Replace <code>[lang]<\/code> with your language code (e.g., <code>fr_CA<\/code>, <code>es_ES<\/code>, <code>de_DE<\/code>).<\/p><\/dd>\n<dt id=\"what%20happens%20to%20existing%20translations%3F\"><h3>What happens to existing translations?<\/h3><\/dt>\n<dd><p>They are updated\/overwritten with the new translations from your import. Post slug translations are also force-replaced (TranslatePress' own slug insert uses INSERT IGNORE, so the plugin clears the existing row first).<\/p><\/dd>\n<dt id=\"will%20auto-translation%20overwrite%20my%20imported%20translations%3F\"><h3>Will auto-translation overwrite my imported translations?<\/h3><\/dt>\n<dd><p>No. Imported translations are saved with status 2 (Human Reviewed), which protects them from being overwritten by automatic translation.<\/p><\/dd>\n<dt id=\"how%20do%20i%20import%20multiple%20categories%20or%20attribute%20values%3F\"><h3>How do I import multiple categories or attribute values?<\/h3><\/dt>\n<dd><p>Use pipe-separated values. Example: <code>_trp_cat_fr_CA<\/code> = \"Chaises|Tables|Bureaux\"<\/p><\/dd>\n<dt id=\"do%20i%20need%20the%20seo%20pack%20for%20slug%20translations%3F\"><h3>Do I need the SEO Pack for slug translations?<\/h3><\/dt>\n<dd><p>Yes. The TranslatePress SEO Pack add-on is required for any slug translation (post, product, or category). Title, content, excerpt, attribute and category-name translations work without it.<\/p><\/dd>\n<dt id=\"is%20this%20plugin%20affiliated%20with%20translatepress%20%2F%20cozmoslabs%3F\"><h3>Is this plugin affiliated with TranslatePress \/ Cozmoslabs?<\/h3><\/dt>\n<dd><p>No. This is an independent third-party integration. \"TranslatePress\" is referenced for compatibility only.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>3.16.0<\/h4>\n\n<ul>\n<li>NEW: Mirror WordPress's <code>-2<\/code>, <code>-3<\/code> slug auto-disambiguator from the EN slug onto the auto-derived translated slug<\/li>\n<li>Prevents TranslatePress' <code>make_slugs_unique()<\/code> from clobbering trailing numbers in titles (e.g. \"...inoxydable-304\" no longer becomes \"...inoxydable-305\")<\/li>\n<li>Only triggers when EN's <code>-N<\/code> is a real WP duplicate suffix (another post owns the base slug) and N is 2..999<\/li>\n<li>No-op for explicit <code>_trp_slug_[lang]<\/code> mappings \u2014 those still win<\/li>\n<li>Variations (<code>product_variation<\/code>) continue to be skipped (they have no public URL)<\/li>\n<\/ul>\n\n<h4>3.15.0<\/h4>\n\n<ul>\n<li>NEW: Post \/ product slug translation support via <code>_trp_slug_[lang]<\/code><\/li>\n<li>NEW: \"Auto-derive post slug from translated title\" setting (default ON) \u2014 builds the translated slug from <code>_trp_title_[lang]<\/code> when no explicit slug is provided<\/li>\n<li>Force-replace of existing post slug translations on re-import (TranslatePress' INSERT IGNORE no longer blocks updates)<\/li>\n<li>Field Reference and Dashboard updated to surface the new slug field and toggle<\/li>\n<\/ul>\n\n<h4>3.14.0<\/h4>\n\n<ul>\n<li>Renamed plugin to \"Oli Import Sync for TranslatePress\" (trademark-friendly; not affiliated with TranslatePress)<\/li>\n<li>Text domain: <code>oli-import-sync-for-translatepress<\/code><\/li>\n<li>Admin: enqueue CSS\/JS via <code>wp_enqueue_style<\/code> \/ <code>wp_enqueue_script<\/code> + inline (no raw style\/script tags)<\/li>\n<li>Description clarifies third-party integration<\/li>\n<\/ul>\n\n<h4>3.13.0<\/h4>\n\n<ul>\n<li>FIX: Strip ALL paragraph separators into a single text block (spaces only, no <code>&lt;br&gt;<\/code>)<\/li>\n<li><code>wpautop()<\/code> wraps in ONE <code>&lt;p&gt;<\/code> = TranslatePress detects ONE string = dictionary always matches<\/li>\n<li>Works regardless of paragraph count differences between languages<\/li>\n<li>Re-enabled content flattening hook and safety-net DB update<\/li>\n<\/ul>\n\n<h4>3.12.0<\/h4>\n\n<ul>\n<li>Per-paragraph translation matching (superseded by 3.13.0)<\/li>\n<li>Removed content flattening (was causing mismatch between DB content and what TranslatePress detects)<\/li>\n<li>Variation descriptions also use per-paragraph matching<\/li>\n<\/ul>\n\n<h4>3.11.0<\/h4>\n\n<ul>\n<li>NEW: Full plugin dashboard under Settings \u2192 TP Import Sync<\/li>\n<li>Tabbed interface: Dashboard, Field Reference, Logs<\/li>\n<li>Auto-detects TranslatePress languages, WooCommerce attributes, and all available translation fields<\/li>\n<li>Copy-to-clipboard button on every field name<\/li>\n<\/ul>\n\n<h4>3.10.0<\/h4>\n\n<ul>\n<li>Admin settings page with log viewer and logging toggle<\/li>\n<\/ul>\n\n<h4>3.9.0<\/h4>\n\n<ul>\n<li>FIX: Content normalization now persists in database (direct DB update bypasses WooCommerce hooks)<\/li>\n<li>Added safety-net normalization on <code>pmxi_after_post_import<\/code><\/li>\n<\/ul>\n\n<h4>3.8.1<\/h4>\n\n<ul>\n<li>FIX: Variation description translations now always normalized<\/li>\n<li>FIX: post_excerpt normalization now also updates the DB<\/li>\n<\/ul>\n\n<h4>3.8.0<\/h4>\n\n<ul>\n<li>Bulletproof content flattening: handles <code>&lt;p&gt;<\/code>, <code>&lt;div&gt;<\/code>, Gutenberg blocks, all <code>&lt;br&gt;<\/code> variants, <code>&amp;nbsp;<\/code> spacers<\/li>\n<\/ul>\n\n<h4>3.7.0<\/h4>\n\n<ul>\n<li>Auto-normalize paragraph breaks (replaces manual <code>_trp_convert_linebreaks<\/code> field)<\/li>\n<\/ul>\n\n<h4>3.6.0<\/h4>\n\n<ul>\n<li>FIX: Multi-paragraph descriptions now translated correctly<\/li>\n<\/ul>\n\n<h4>3.5.0<\/h4>\n\n<ul>\n<li>FIX: Handle WordPress <code>wptexturize()<\/code> smart quotes in translation matching<\/li>\n<\/ul>\n\n<h4>3.4.0<\/h4>\n\n<ul>\n<li>Keep variation description translation meta for direct theme lookup<\/li>\n<\/ul>\n\n<h4>3.3.0<\/h4>\n\n<ul>\n<li>FIX: Attribute translation for variations now correctly matches HTML entities<\/li>\n<\/ul>\n\n<h4>3.1.0<\/h4>\n\n<ul>\n<li>NEW: Variation description translation support (<code>_trp_variation_desc_[lang]<\/code>)<\/li>\n<\/ul>\n\n<h4>3.0.0<\/h4>\n\n<ul>\n<li>NEW: Full support for WooCommerce variable products and variations<\/li>\n<li>Force update mode: existing translations are always overwritten<\/li>\n<\/ul>\n\n<h4>2.3.2<\/h4>\n\n<ul>\n<li>Added upgrade notice section<\/li>\n<\/ul>\n\n<h4>2.3.1<\/h4>\n\n<ul>\n<li>Renamed plugin (text domain aligned with plugin slug)<\/li>\n<li>Updated tested up to WordPress 6.9<\/li>\n<\/ul>\n\n<h4>2.3.0<\/h4>\n\n<ul>\n<li>NEW: WooCommerce category and attribute translation support<\/li>\n<\/ul>\n\n<h4>2.2.0<\/h4>\n\n<ul>\n<li>Line break conversion is now optional (deprecated in 3.7.0)<\/li>\n<\/ul>\n\n<h4>2.1.0<\/h4>\n\n<ul>\n<li>Added automatic line break conversion<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Rewrote to use official TranslatePress Custom API<\/li>\n<li>Added support for multiple languages simultaneously<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<\/ul>","raw_excerpt":"Import multilingual content into TranslatePress when using WP All Import. Third-party integration; not affiliated with TranslatePress.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/297915","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=297915"}],"author":[{"embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/bigrat95"}],"wp:attachment":[{"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=297915"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=297915"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=297915"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=297915"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=297915"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=297915"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}