Paragraphs
vs WPML

All the workflow. None of the duplicate posts.

WPML was a great answer to translation in 2010. Fifteen years later, the duplicate-post model is the source of most WordPress translation pain. Paragraphs replaces the data model. Your workflow stays.

TL;DR

Three differences that compound.

  • Where translations live

    WPML: cloned post rows. Paragraphs: external graph keyed by content fingerprint.

  • Where the URL comes from

    WPML: dictated by its schema. Paragraphs: subdir / subdomain / TLD — your call per project.

  • What happens when you leave

    WPML: translations tied to plugin tables. Paragraphs: export JSON / XLIFF / TBX any time, free.

Storage

Why the data model matters.

WPML model

A post in English with translations to ES + FR + DE becomes 4 post rows linked by `wp_icl_translations`. Edit the source, and WPML marks the 3 translations stale. Re-sync is a per-locale job; admin gets slower with each locale.

Paragraphs model

A post is still a post. Each translatable unit inside it (block, title, button) is fingerprinted on save. The graph stores translations keyed by fingerprint. Edit one paragraph; only that fingerprint re-translates. Add a 13th locale; nothing slows down.

Side-by-side

Feature matrix.

Feature Paragraphs WPML
Storage model
External graph, fingerprintedDuplicate posts per locale
URL structure
Free choice: subdir / subdomain / TLDPlugin-controlled, schema-locked
Admin UI impact
None — your editor stays the sameAdds locale switcher to every screen
Headless story
Yes No
Translated JSON-LD
Yes Translates strings, not structure
Per-locale llms.txt
Yes No
Block-level fingerprinting
Edit one block, only that re-translatesRe-syncs whole post
Migration off the product
Export JSON / XLIFF / TBX any timeTranslations tied to WPML schema
Pricing model
Words / month, predictablePer-site licence, annual renewals
Brand consistency
Glossary enforcement built inManual via Advanced Translation Editor
Migration

One command moves you over.

The Paragraphs WordPress plugin ships with a WPML importer. It reads your existing post duplicates, dedupes by content, fingerprints, and writes everything to the graph as `approved` translations. Your old WPML posts stay in place until you delete them — zero-downtime cutover.

WP-CLI migration bash
# Dry run first — preview what would happen
wp paragraphs migrate from-wpml --dry-run

# Run the migration (creates a checkpoint you can revert)
wp paragraphs migrate from-wpml --execute

# Cut traffic to the Paragraphs renderer
wp paragraphs delivery set edge-runtime

# Once you're happy — delete WPML's duplicate posts
wp paragraphs migrate from-wpml --cleanup

Try the migration on a staging copy first.

Free tier covers a small site, so you can test the cutover end-to-end with zero cost.