Directory / plugin
EffortLess Multisite Auto Translate
v3.3.57 · by domclic
Translates posts, pages, and custom post types across a WordPress Multisite network using OpenAI or DeepL, preserving Gutenberg blocks.
About this plugin
EffortLess Multisite Auto Translate is a Network-Activated plugin for WordPress Multisite. When a post, page, or custom post type is published or updated on one site in the network (the “source” site), the plugin sends its title, content, categories, and tags to your chosen translation provider (OpenAI or DeepL) and creates or updates a matching translated copy on each of the network’s other sites you’ve selected as a “destination”. Translation runs in the background via WordPress Cron (or Action Scheduler, if another active plugin provides it), not during the page save itself.
Content is translated block by block: each Gutenberg block is sent to the API and reassembled individually, so block structure, attributes, and nested layouts (columns, groups, galleries) survive translation. Shortcodes and core/html blocks are left untouched rather than translated. A Glossary lets you pin specific terms (brand names, proper nouns) to a fixed translation, or to “do not translate,” per destination site if needed.
What gets translated
- Post titles and content (Gutenberg blocks)
- Pages and public custom post types you haven’t unticked in “Post Types to Translate”
- Categories, tags, and other public taxonomies
- Post metadata you explicitly add to the “Extra translatable meta keys” setting
What is left untouched
- Shortcodes (preserved exactly, including their attributes)
core/htmlblocks (skipped by default; aelmat_translate_html_blockfilter exists for developers who want to opt them in)- Private post metadata
Settings (Network Admin EffortLess Multisite Auto Translate: API configuration, Site configuration and Translation glossary tabs)
- Translation Provider — OpenAI (GPT), DeepL, or (WordPress 7.0+ only) the built-in WordPress AI Client, which uses whichever provider your site has configured under Settings Connectors instead of a key entered here. Only the selected provider’s key below is used.
- OpenAI API Key / DeepL API Key — required for whichever provider is selected. A “Test API Key” button verifies the active one before you save.
- Enable automatic translations — checkbox. When off, translation only happens if triggered manually from the block editor’s EffortLess Multisite Auto Translate panel.
- Publish new translations as draft — checkbox, off by default. When on, a translation’s first creation is saved as a draft instead of published, so a human can review it before it goes live. Only affects first creation — updating an already-published translation keeps updating it in place, never unpublishing it automatically.
- GPT Model —
gpt-6-luna,gpt-4o-mini(default),gpt-5-nano(the cheapest),gpt-5.4-mini(several times the price of the others) orgpt-5-mini. OpenAI only. The menu lists those your OpenAI API key may use, read from OpenAI’s model list (GET /v1/models, kept 12 hours per key and read again when the key is saved and with “Test API Key”); when that list cannot be read, every model is listed. The GPT-5 and GPT-6 models are reasoning models: they are sentmax_completion_tokensand their lowest reasoning effort (minimalfor gpt-5-nano and gpt-5-mini,nonefor gpt-5.4-mini,lowfor gpt-6-luna) instead ofmax_tokensand a temperature, and their reasoning is billed as output tokens.gpt-4ois no longer offered; a site already using it keeps it until another model is chosen. Changing the model clears the translation memory, so the next run translates everything again. - Use OpenAI’s Batch API — off by default, OpenAI only. Automatic translations (a saved post, Translate All Posts, Sync Design) send their texts to OpenAI as one batch per post, billed at half price and answered within 24 hours (often within minutes). Meanwhile the post shows “📦 in batch” on the Status tab and its copies keep their previous version; the batches are checked every 10 minutes by WP-Cron, and when one ends its answers go into the translation memory and the post is translated from them. “translate now”, retries and texts translated after a copy is saved (category and tag names, SEO fields) are sent directly at the normal price. A batch that OpenAI cannot finish (failed or expired) is replaced by a direct translation.
- Translation Style — Literal, Natural (default), or Creative — controls how closely the translation sticks to the source wording. Applies to both providers (mapped internally for each).
- Additional Instructions — free-text instructions appended to every translation request (tone, formality, house style). OpenAI only — DeepL has no prompt/instruction mechanism.
- Post Types to Translate — untick any post type to stop translating it, both automatically and via Bulk Translate. Lists every public post type registered on the source site.
- Extra translatable meta keys — a plain-text list (one per line) of additional post-meta keys to translate, for meta fields added by other plugins (e.g. custom SEO title/description fields).
- Shared Media Library — optionally designate one site’s Media Library as the single source of truth for images; other sites’ translated content then links back to that site’s files instead of duplicating them.
- Source Site — the one site whose saves trigger translation.
- Destination Sites — which of the network’s other sites receive translated copies.
- Glossary — terms with a fixed translation, so brand names, place names and words with several meanings translate consistently. Pick a language at the top to see and edit its values; a value under “All languages (default)” applies to every language without its own, “Keep as is” leaves a brand name unchanged, and an empty term is left to the AI. It can be exported to a CSV file, edited in a spreadsheet and imported again.
A running character-usage total (this month + lifetime) is shown above the API key fields once translation has run at least once — a rough usage indicator, not exact billing; check your provider’s own dashboard for that.
A “Translation Status” box also appears in the post editor’s sidebar (source site only) showing each destination’s status for the post you’re editing, without a trip to Network Admin.
Tools (Network Admin EffortLess Multisite Auto Translate Tools)
Bulk Translate All Posts, Force Re-translate All (clears retry/failure counters and re-sends everything, skipping the translation memory: the most expensive action), Sync Design & Templates (switches every destination site’s active theme to match the source, network-enabling it first if needed, then copies global styles, site icon, logo, and queues templates/patterns for translation — a confirmation dialog states the theme change before you proceed), Resync Media Links (also runs automatically whenever the Shared Media Library setting changes), Clean Destinations (removes orphaned translations and non-translation content added directly on a destination site), Flush Permalinks, and Emergency Stop (cancels every pending translation). Stuck queue entries clear themselves automatically within about an hour — there’s no separate cleanup button for that.
Notes and limitations
- Requires WordPress Multisite to do anything. It can be installed and activated on a single-site WordPress (for example before you enable Multisite), but there it only shows a notice on the Plugins screen and has no settings. After converting the site to a network, network-activate it from the Network Admin; the one-time network setup runs automatically.
- Translated content is saved through WordPress’s normal sanitization; the plugin never disables it. Translations are saved by a background task, as the source post’s author when that author and the user who last saved the source may post unfiltered HTML (on multisite: Super Admins) and the translation adds no code the source lacks. The copy then keeps the source’s
<style>,<script>and form fields. Otherwise WordPress removes that code from the copy, as it would for the author’s own save, and the translation log says why. Theme templates and template parts copied by Design Sync are always saved with WordPress’s filter. - “Sync Design & Templates” does not copy Additional CSS; each site keeps its own.
- Translation is asynchronous: after publishing, allow a few seconds (or up to a WP-Cron cycle on a low-traffic site) for the destination copies to appear.
- Trashing, permanently deleting, or restoring a post on the source site does the same on every destination site’s translated copy.
- Adding a new destination site automatically switches that new site’s theme to match the source site as part of its one-time setup (it also copies the design and starts translating existing content to it) — this only happens for a brand-new site being added, never for a site already in production; running “Sync Design & Templates” manually against an existing destination will switch its theme too, and asks for confirmation first.
- A translation that fails is retried up to twice with a growing delay; after 10 total failures for a given post/destination pair, the plugin stops retrying it (visible as “abandoned” in the Status tab with the last error, with a manual retry button). An abandoned post is not sent again, even by Translate All Posts, until the source post is edited.
- When the translation service itself fails (invalid API key, no credit left, unknown model, or 5 failures in a row where the service does not answer), every translation pauses at once, the network administrator gets one e-mail, and the settings page shows the error. Posts wait without any API call. Saving the API configuration, or clicking “Resume translations”, queues them again. These failures do not count towards abandoning a post.
- The Status tab refreshes its badges and status cells every 20 seconds, only while the browser tab is visible.
- No custom database tables are created (except a translation-memory cache table, used to skip re-translating a block whose source content hasn’t changed). Uninstalling the plugin removes it along with all
elmat_*site options and the translation-linking postmeta.
External services
This plugin sends content to your chosen translation provider’s API in order to translate it — this is the plugin’s core function and cannot be disabled while automatic or manual translation is used. Only the provider you’ve selected in Settings is ever contacted.
OpenAI (api.openai.com) — used when Translation Provider is set to OpenAI. What is sent: the post title, the text content of each Gutenberg block (shortcodes and core/html blocks are excluded), the names of categories/tags/taxonomies, and (if set) your “Additional Instructions” text. Terms of use: https://openai.com/policies/terms-of-use — Privacy policy: https://openai.com/policies/privacy-policy
OpenAI Batch API (api.openai.com, Files and Batches endpoints) — used only when “Use OpenAI’s Batch API” is checked. To list the models in the settings, the API key is also sent to OpenAI’s model list (GET /v1/models, no content) at most every 12 hours. The same texts as above are uploaded to OpenAI as a batch file (Files API, purpose “batch”), OpenAI translates them within 24 hours, and the plugin downloads the answers and then deletes the batch file, the answer file and any error file from your OpenAI account. Same terms of use and privacy policy as OpenAI above.
DeepL (api.deepl.com / api-free.deepl.com) — used when Translation Provider is set to DeepL. What is sent: the same title/content/taxonomy names as above (Additional Instructions does not apply to DeepL). Terms of use: https://www.deepl.com/en/pro-license — Privacy policy: https://www.deepl.com/en/privacy/
WordPress AI Client (WordPress 7.0+ only) — used when Translation Provider is set to “WordPress AI Client”. The same title/content/taxonomy names as above are sent, but to whichever external AI provider your site has configured under Settings Connectors, not to this plugin or its developer — this plugin never sees that provider’s identity, endpoint, or API key, only the result. Check your configured Connectors provider’s own terms of use and privacy policy.
Either way, this happens every time a post is published or updated on the configured source site, and whenever “Bulk Translate All Posts” or a manual per-post translation is triggered. No personal visitor data, and no data from any site other than the post being translated, is sent. Using OpenAI or DeepL requires your own API key for that provider (entered in the plugin’s settings); using the WordPress AI Client instead defers entirely to whatever provider and credentials your site’s Connectors screen has configured. Either way this is billed to your own account directly — the plugin developer has no access to your key, your account, or the content sent.