Skip to content
TAQNIX
Odoo ModulesWordPress PluginsWordPress ThemesShopify ThemesApp TemplatesScripts & UtilitiesBlogSell on TAQNIX

AI Post and Product Translator for WordPress & WooCommerce documentation

A guide to AI Post and Product Translator: connecting your AI account, languages and glossary, translating one item or many, the side-by-side review, outdated translations, WooCommerce products, the switcher and hreflang links, WPML and Polylang, and the cost.

Documents version 1.0.0Updated Oct 29, 2026

Start here

In plain words: AI Post and Product Translator translates a post, a page or a WooCommerce product into another language with your own AI account and saves the result as a linked draft: a new post in the target language, connected to its original. Block markup, links, shortcodes and your brand names are protected by placeholders and checked after the translation; a broken answer is refused and nothing is saved. You review the draft side by side with the original and publish it yourself.
Side-by-side review, bulk translation with a cost estimate, and the Translations box on the edit screen.
Side-by-side review, bulk translation with a cost estimate, and the Translations box on the edit screen.
Tip: It does not need WPML, Polylang or TranslatePress: the links between translations are kept in post meta. If WPML or Polylang is active, see the chapter about them.

What you get

FeatureWhat it does
Linked draftsEach translation is a new draft linked to the original by a group id and a language. Nothing is ever published by the plugin.
What is translatedTitle, content, excerpt (the short description of a product), SEO title and description of Yoast SEO, Rank Math, SEOPress and AI SEO Meta Generator, custom product attributes, and (switches) alt, title, aria-label and placeholder attributes.
Block-safeOnly text is sent; block comments, JSON, links, shortcodes and code stay as they are. Placeholders keep inline formatting.
Glossary and do-not-translate listYour term translations are always applied; brand names, SKUs, codes, URLs and e-mail addresses are never translated.
ValidationEvery answer is checked: same placeholders once each, no new markup, links or shortcodes, and the same block structure, links and tags as the original. Otherwise it is refused.
Outdated detectionWhen the original changes, its translations are marked outdated. One click translates again; a published translation is not changed, the new text waits for your review.
Bulk translationChoose items and languages, see a cost estimate, start: a background run with progress, pause, resume and cancel.
Side-by-side reviewOriginal and translation next to each other, every field, right to left where needed.
On the siteLanguage switcher (block, shortcode, widget), hreflang alternate links with x-default, and the lang attribute of translated pages.
Per languageName, locale, direction, formality, tone and the slug policy (transliterate, translated title, or original slug + code).
ProductsWooCommerce duplicate of the product (price, images, variations), translated texts and custom attributes, categories mapped to their translations.
ArabicArabic as a source and as a target, right to left screens, the plugin translated into Arabic.

Requirements

ItemDetails
WordPress6.0 or newer
PHP7.4 or newer
AlsoOptional: WooCommerce 8.0+ for products; Yoast SEO, Rank Math, SEOPress or AI SEO Meta Generator for SEO fields
An AI providerAn account and an API key with an OpenAI-compatible service (OpenAI, OpenRouter, Azure, a local server such as Ollama...) or with Anthropic. You pay your provider for what you use; the plugin has no usage fees.
LicenseGPL-2.0-or-later

Install

  1. Unzip the package you downloaded. Inside is ai-post-and-product-translator.zip (do not unzip this one).
  2. In WordPress open Plugins → Add New Plugin → Upload Plugin, choose ai-post-and-product-translator.zip and press Install Now.
  3. Press Activate Plugin.
  4. Open Settings → AI Translator → AI connection, choose your provider, paste your API key and press Test the connection.

Connect your AI

In plain words: The plugin works with your own AI account. In Settings → (this plugin) → AI connection choose the provider, paste the key and press Test the connection: a green message tells you that the model answered.
FieldMeaning
ProviderOpenAI-compatible (OpenAI, OpenRouter, Azure, Groq, Ollama, LM Studio...) or Anthropic.
API addressLeave empty for the official address. For another service enter it, for example http://localhost:11434/v1.
API keyStored in your database (never shown again). You can define it in wp-config.php instead and the field disappears.
ModelThe model name at your provider. A small, cheap model is enough for most tasks.
Maximum answer lengthCaps the tokens of one answer, so a request cannot cost more than you expect.
Daily limitThe number of requests the plugin may make per day (0 = no limit). When it is reached the plugin stops asking until tomorrow.
PrivacyHides e-mail addresses, phone numbers and card-like numbers before the text is sent.
Tip: The table Recent use at the bottom of the tab shows the requests, the errors and the tokens of the last days.
The AI connection tab after a successful test.
The AI connection tab after a successful test.
Tip: The daily limit of this plugin is 200 requests by default (not unlimited). One item is one request per 5,000 characters of text, so a long article can need several.

Languages and glossary

In plain words: Translations → Languages and glossary. English, Arabic and French are there at the start; add or remove languages in the table. The code is used in the hreflang links (en, ar, fr, pt-BR). For every language you choose the direction, the formality, a tone and the slug of new translations.
Languages, glossary and the do-not-translate list.
Languages, glossary and the do-not-translate list.
OptionMeaning
FormalityDefault, formal (polite forms of address) or informal.
ToneA few words added to the instructions, for example “warm, simple”.
Slug of new translationsTransliterate the translated title into Latin letters (good for Arabic), use the translated title, or keep the original slug with the language code (oak-table-fr).
GlossaryOne rule per line: free delivery = توصيل مجاني | ar. Without “| code” the rule is for every language. A capital at the start of a sentence is kept.
Do not translateOne word or phrase per line, case sensitive: brand names, product names.
Tip: The language of the original content is set in the settings (English by default). A single post can have another language: set it in its Translations box before it has translations.

Translate one item

In plain words: Open a post, a page or a product. The Translations box (in the sidebar of the block editor, at the side of the classic editor) lists the languages. Press Translate: the saved version of the original is translated and a draft is created. Then Edit or Review it.
The Translations box in the block editor.
The Translations box in the block editor.
The same box on a WooCommerce product.
The same box on a WooCommerce product.
Important: Save the original first: the plugin translates what is saved, not what you typed since.

Review side by side

In plain words: Translations → Overview lists every translation with its language and state (draft, published, outdated, update waiting). Review shows the original and the translation side by side: title, content, excerpt, SEO fields and product attributes, right to left for Arabic.
An outdated published translation with a new translation waiting.
An outdated published translation with a new translation waiting.
A product: title, description, short description and attributes.
A product: title, description, short description and attributes.
Tip: Read the translation before you publish it, especially numbers, product facts and anything legal. The AI can be wrong.

When the original changes

In plain words: Each translation keeps a fingerprint of the original. When the original is saved with other text, its translations are marked Outdated (in the box, the overview and the Languages column of the lists). Translate again updates a draft translation in place. A published translation is never changed by the AI: the new text is kept as an update waiting and you apply it on the review screen with one click.
The Languages column of the posts list (an outdated translation is marked).
The Languages column of the posts list (an outdated translation is marked).

Bulk translation

In plain words: Translations → Bulk translation lists the published originals. Filter by type, category or “not yet in” a language, tick items and languages and press Estimate the cost: you see the number of translations, characters, requests, tokens and an estimated cost from the prices in the settings. Then Start. The run continues in the background (WP-Cron), faster while the page is open; pause, resume or cancel it at any time. Items that already have an up-to-date translation are skipped; tick the box to translate again the outdated ones.
Items, languages and the estimate.
Items, languages and the estimate.
A bulk run in progress.
A bulk run in progress.
Tip: The run pauses by itself when the daily limit is reached or after five errors in a row, and tells you why.

What is protected and checked

Kept as it isHow
Block markupBlock comments with their JSON settings, every block-level tag and its attributes (class, style, id, data-*, dir), so the block editor opens the translation without “invalid block” messages.
Links and mediaEvery href, src and srcset stays byte for byte; link texts are translated, the addresses are not.
Inline formattingBold, italic, links and spans become paired placeholders such as <g1>…</g1>, so the AI can move them with the words but cannot drop or invent them.
Shortcodes, code, scriptsShortcodes, <code>, <pre>, scripts, styles, SVG and embeds are never sent.
Your wordsThe do-not-translate list (brand and product names), the SKU of the product, product codes such as AB-1200 (switch), e-mail addresses, phone numbers, SEO variables such as %%sitename%%.
Your glossaryA glossary term is replaced by your translation of it, always.
TranslatedText between tags, heading texts, button and link labels, list items, and (switches) the alt, title, aria-label and placeholder attributes.
In plain words: After the translation, every piece of text is checked: each placeholder exactly once and correctly nested, no new HTML, links, block comments or shortcodes, no empty or runaway text. Broken pieces are sent once more; if they are still broken the whole translation is refused with the reason and nothing is saved. Then the rebuilt text is compared with the original: same block delimiters and settings, same tags, same links and sources, same shortcodes, same dir attributes.
Important: Text stored inside the JSON settings of a block (a few blocks keep a label there) is not translated: it stays as in the original. Check such blocks in the review.

WooCommerce products

In plain words: A product is copied with the duplicate feature of WooCommerce (price, images, gallery, variations, stock settings), then its title, description, short description, SEO fields and custom attributes are translated. The copy is a draft with its own SKU (WooCommerce adds a suffix, for example CN-OST-180-1) and its own stock.
PartBehaviour
Custom attributesNames and values translated (switch). Attributes used for variations are kept so the variations keep working.
Global attributes and categoriesThe translated term is used when you linked one (edit the category, tag or attribute term: a field per language); otherwise the original term, or none (setting).
ImagesThe same media files; the alt text of the media library item is shared by all languages and is not changed.
Prices and stockCopied once; later changes are not synchronised.

On the site: switcher and hreflang

In plain words: Add the block Language switcher, the shortcode [tqtr_switcher] (style="inline" or "list", current="0" to hide the current language) or the widget Translations of this page. It links only the published translations of the page shown. In the page head the plugin prints hreflang alternate links for the published members of the group, with x-default pointing to the original (both switches in the settings), and sets the lang attribute of a translated page.
The switcher on a French translation.
The switcher on a French translation.
The alternate links in the head of the original.
The alternate links in the head of the original.
Tip: Translations are normal posts with their own addresses: there is no /ar/ or /fr/ prefix in the URL and menus are not translated. Use the switcher block in your template or add the translated pages to a menu.

With WPML or Polylang

In plain words: When WPML or Polylang is active the plugin says so and, by default, works in copy-out mode: it translates for review, shows the result side by side with Copy buttons and a JSON download, and creates no post. In the settings you can choose the API mode: the draft is created and registered as a translation through their documented interfaces (Polylang: pll_set_post_language and pll_save_post_translations; WPML: the wpml_element_language_details filter and the wpml_set_element_language_details action). In both modes this plugin prints no switcher and no hreflang links, and it never writes into their tables.
Important: We checked these interfaces in the WPML and Polylang documentation on 30 October 2026 and our tests call them through stand-ins. We did not run WPML or Polylang themselves. With Polylang, use the same language codes on the Languages page.

The settings

In plain words: Settings → AI Translator.
The settings tab.
The settings tab.
OptionMeaning
Language of the original contentThe language of your posts (a post can have its own).
Content typesPosts, pages, products and other public types.
What is translatedSEO fields, image alt texts, other attributes, product attributes, product codes kept.
Categories and tagsUse linked translated terms, otherwise the original; or translated terms only.
On the siteAlternate links, x-default, page language.
When WPML or Polylang is activeCopy-out only, or the API mode.
Text per requestCharacters per AI request; long posts are sent in several.
Longest itemItems with more text are refused.
Largest bulk runTranslations one bulk run may create.
Who can start bulk runsEditors and administrators, or administrators only.
Prices of tokensOnly used for the estimate.

Keep the cost low

In plain words: The text of an item is sent once per language, in requests of at most “Text per request” characters, plus a short instruction. The answer is about as long as the text (longer in tokens for Arabic and other non-Latin scripts). The estimate before a bulk run uses these numbers and the prices you enter.
TipWhy
Try one item firstCheck the style and the glossary before a bulk run.
Use a mid-size modelVery small models break placeholders more often; a refused answer costs a request.
Keep the daily limitThe run pauses by itself and continues when you resume it.
Translate the outdated ones onlyItems with an up-to-date translation are skipped.

Privacy

In plain words: Using an AI model means sending text to your provider. For each item and language: the text pieces of its title, content, excerpt, SEO fields and custom product attributes, with placeholders instead of links, shortcodes, code, e-mail addresses, phone numbers, the SKU and the words of your do-not-translate list (those never leave your site). Drafts and private items are sent only when someone translates them. E-mail addresses, phone numbers and card-like numbers are masked first (an option, on by default). Nothing is sent to Taqnix. Mention your AI provider in your privacy policy: the plugin adds a suggested paragraph in Settings → Privacy.
Important: AI can be wrong. Treat what it writes as a draft and read it before you publish it.

Who can do what

WhoCan
AdministratorsSettings, AI connection, languages and glossary.
Editors and administrators (setting)Bulk runs.
A user who may edit the original and create items of its typeTranslate it, translate again, review.
A user who may publish the translationApply a waiting update to a published translation.
OthersNothing: every action checks a security token and these permissions.

Arabic and right to left

In plain words: Arabic works as a source and as a target. Translations into Arabic use formal Modern Standard Arabic by default (change it per language), the review shows Arabic right to left, dir attributes in your content are never changed, and the transliterated slug keeps addresses in Latin letters.
The review in an Arabic WordPress.
The review in an Arabic WordPress.
Bulk translation in Arabic.
Bulk translation in Arabic.
An Arabic original in the block editor.
An Arabic original in the block editor.

Limits

LimitDetail
AccuracyThe AI can be wrong, miss nuance or mistranslate product facts. Every translation is a draft so that a person reads it.
Not a full multilingual systemNo language prefixes in URLs, no translated menus, theme strings or widgets, no automatic language redirect.
Block JSONText kept inside block settings (JSON) is not translated.
MediaThe alt text of a media library item is shared and not translated; alt texts written inside the content are.
VariationsVariation attributes and their values are not translated.
SyncPrices, stock and images are copied once, not synchronised.
SEO pluginsOnly the SEO title, description, focus keyword and social title/description keys listed in the guide are translated; All in One SEO keeps its data in its own table and is not supported.
WPML and PolylangInterfaces checked in their documentation, not run on our test site.
Background runsUse WP-Cron; on a site without visits keep the page open.
Page directionThe lang attribute of a translated page is set, but the page keeps the direction of the site: an Arabic translation on an English site is shown left to right unless your theme handles it.
Long itemsOne item is translated in one browser request (at most 5 minutes) or one background step. A very long item needs many AI requests and can run past that limit; an item that fails or is refused saves nothing, so its requests are lost. Keep the longest-item limit low (60,000 characters by default).

For developers

In plain words: Skip this chapter if you only use the plugin.
// Translate one item into one language (a linked draft; nothing is published)
$res = TQTR_Translator::instance()->translate( $post_id, 'ar' );   // array( id, status ) or WP_Error

// Find the translations of an item
$all = TQTR_Links::members( $post_id );          // array( 'en' => 12, 'ar' => 57 )
$ar  = TQTR_Links::translation( $post_id, 'ar' ); // 57, or 0
$old = TQTR_Links::is_outdated( $ar );            // true when the original changed since

// The language switcher in a template
echo TQTR_Frontend::switcher( 0, array( 'style' => 'list' ) );   // or the shortcode [tqtr_switcher style="inline"]

// Filters
add_filter( 'tqtr_post_types', function ( $types ) { $types[] = 'event'; return $types; } );
add_filter( 'tqtr_fields', function ( $fields, $post ) {
	$fields['meta:_subtitle'] = array( 'value' => get_post_meta( $post->ID, '_subtitle', true ), 'html' => false );
	return $fields;
}, 10, 2 );
add_filter( 'tqtr_system_prompt', function ( $prompt, $from, $to ) { return $prompt . "\nUse British spelling."; }, 10, 3 );
add_filter( 'tqtr_copy_meta_keys', function ( $keys ) { $keys[] = '_my_layout'; return $keys; } );

// The key can live in wp-config.php
define( 'TQTR_AI_KEY', 'sk-...' );

Troubleshooting

ProblemWhat to do
The AI answer was refusedThe model broke the placeholders or added markup. Try again, use a stronger model, or split very long paragraphs.
The AI service answered 401The key is wrong or has no access to the model.
The daily limit is reachedRaise it in the AI connection tab or wait until tomorrow; a bulk run resumes where it stopped.
This item has more characters than the limitRaise “Longest item” in the settings.
The switcher does not showOnly published translations are linked, and only when WPML or Polylang is not active.
The category is the original oneLink the category to its translation on the edit screen of the category.
The bulk run does not moveWP-Cron runs on visits: keep the page open or call wp-cron.php from a real cron job.

Updating and removing

Install the new zip over the old one in Plugins → Add New Plugin → Upload Plugin (WordPress offers to replace the current version), or replace the folder ai-post-and-product-translator by FTP. Your settings, languages, glossary and the links between translations are kept. To remove the plugin, deactivate and delete it: its settings are removed with it.

Deleting the plugin removes its settings, languages, glossary, the bulk job and the links between translations (post and term meta). The translated posts stay as normal posts.

Support

Installation help and bug fixes are included for 6 months, with lifetime updates. Contact us through the marketplace page where you bought the plugin or write to support@taqnix.com with your WordPress version, the plugin version and a screenshot.