Title: Translation Cleaner for WPML
Author: Klemens Hechenberger
Published: <strong>July 1, 2026</strong>
Last modified: July 1, 2026

---

Search plugins

![](https://s.w.org/plugins/geopattern-icon/translation-cleaner-for-wpml_014e86.
svg)

# Translation Cleaner for WPML

 By [Klemens Hechenberger](https://profiles.wordpress.org/klemensh/)

[Download](https://downloads.wordpress.org/plugin/translation-cleaner-for-wpml.1.0.0.zip)

 * [Details](https://wordpress.org/plugins/translation-cleaner-for-wpml/#description)
 * [Reviews](https://wordpress.org/plugins/translation-cleaner-for-wpml/#reviews)
 *  [Installation](https://wordpress.org/plugins/translation-cleaner-for-wpml/#installation)
 * [Development](https://wordpress.org/plugins/translation-cleaner-for-wpml/#developers)

 [Support](https://wordpress.org/support/plugin/translation-cleaner-for-wpml/)

## Description

Translation Cleaner for WPML helps you keep your multilingual WordPress site clean
by identifying and fixing three common categories of WPML data corruption, all from
a single admin tool under **Tools  Translation Cleaner for WPML**.

**Module 1 — Orphan Translations**

Finds translated posts whose main-language counterpart no longer exists (deleted
or trashed). These orphaned records consume storage, clutter your admin, and break
WPML’s translation groups.

 * Bulk action: Move to Trash (reversible) or Permanently Delete
 * Reason codes per row: _Missing original_, _Original deleted_, _Original trashed_
 * Every deletion is re-validated immediately before execution — if the original
   was restored since the scan, the item is skipped

**Module 2 — Misplaced Originals**

Finds posts that WPML treats as originals (`source_language_code = NULL`) but are
registered under a language that is not your main language — with no main-language
version in that translation group at all.

This typically happens when content is created directly in a secondary language 
without going through the main language first. Left uncorrected, these posts can
cause translation workflow issues and incorrect language flags.

 * Per-row fix: select the post’s actual language from a dropdown and reassign it—
   no bulk guessing

**Module 3 — Swapped Originals**

Finds cases where a secondary-language post carries the “original” flag while a 
live main-language version exists in the same translation group. WPML incorrectly
treats the secondary post as the source, which inverts the translation relationship
for both posts.

 * Per-row fix: one click to promote the main-language post to original and demote
   the secondary to a translation — the trid (translation group) is preserved

**Common features across all modules**

 * Scan all WPML-tracked post types, including non-public types like `nav_menu_item`
 * Filter by post type and main language
 * Detailed results table with sort, search, and pagination
 * Export results to CSV before taking any action
 * Developer hooks: `wmtc_protected_post_ids`, `wmtc_orphan_results`, `wmtc_before_delete`,`
   wmtc_after_delete`

**Requirements**

 * WPML must be installed and active

## Installation

 1. Upload the `wpml-translation-cleaner` folder to `/wp-content/plugins/`
 2. Activate the plugin through **Plugins  Installed Plugins**
 3. Navigate to **Tools  Translation Cleaner for WPML**
 4. Select a module, choose your main language and post types, then click **Run Scan**

## FAQ

### Does this work with WooCommerce Multilingual (WCML)?

Yes. The scanners detect issues regardless of how WPML or WCML registered the content,
including products managed in WCML’s independent mode.

### Will it delete or modify content incorrectly?

For orphan deletions, every item is re-validated against a fresh database scan immediately
before the action runs. For reassignment actions (Misplaced Originals, Swapped Originals),
the fix is performed via WPML’s own `wpml_set_element_language_details` API — no
raw data is modified outside of WPML’s own logic.

### Can I undo a deletion?

Use **Move to Trash** for reversible cleanup. **Permanently Delete** is irreversible—
always export a CSV and back up your database first.

### Can I undo a language reassignment?

Not automatically. Before running fixes in bulk, export a CSV so you have a record
of the original state. The CSV can be used as a reference to manually revert if 
needed.

### What post types are scanned?

All post types that WPML is tracking in `icl_translations`, including `nav_menu_item`
which is a common source of orphaned translations invisible to standard WordPress
post type queries.

### How do I exclude specific posts from cleanup?

Use the `wmtc_protected_post_ids` filter:

    ```
    add_filter( 'wmtc_protected_post_ids', function( $ids ) { $ids[] = 42; return $ids; } );
    ```

### Is this plugin affiliated with WPML or OnTheGoSystems?

No. This is an independent tool built to work alongside WPML. WPML is a trademark
of OnTheGoSystems.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“Translation Cleaner for WPML” is open source software. The following people have
contributed to this plugin.

Contributors

 *   [ Klemens Hechenberger ](https://profiles.wordpress.org/klemensh/)

[Translate “Translation Cleaner for WPML” into your language.](https://translate.wordpress.org/projects/wp-plugins/translation-cleaner-for-wpml)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/translation-cleaner-for-wpml/),
check out the [SVN repository](https://plugins.svn.wordpress.org/translation-cleaner-for-wpml/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/translation-cleaner-for-wpml/)
by [RSS](https://plugins.trac.wordpress.org/log/translation-cleaner-for-wpml/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 1.0.0

 * Initial release
 * Module: Orphan Translations — find and delete orphaned translation posts
 * Module: Misplaced Originals — find and reassign posts flagged as originals in
   the wrong language
 * Module: Swapped Originals — fix inverted original/translation relationships within
   a translation group

## Meta

 *  Version **1.0.0**
 *  Last updated **24 hours ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 5.9 or higher **
 *  Tested up to **7.0**
 *  PHP version ** 7.4 or higher **
 * Tags
 * [cleanup](https://wordpress.org/plugins/tags/cleanup/)[maintenance](https://wordpress.org/plugins/tags/maintenance/)
   [multilingual](https://wordpress.org/plugins/tags/multilingual/)[translation](https://wordpress.org/plugins/tags/translation/)
   [wpml](https://wordpress.org/plugins/tags/wpml/)
 *  [Advanced View](https://wordpress.org/plugins/translation-cleaner-for-wpml/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/translation-cleaner-for-wpml/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/translation-cleaner-for-wpml/reviews/)

## Contributors

 *   [ Klemens Hechenberger ](https://profiles.wordpress.org/klemensh/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/translation-cleaner-for-wpml/)