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
What you get
| Feature | What it does |
|---|---|
| Linked drafts | Each 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 translated | Title, 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-safe | Only text is sent; block comments, JSON, links, shortcodes and code stay as they are. Placeholders keep inline formatting. |
| Glossary and do-not-translate list | Your term translations are always applied; brand names, SKUs, codes, URLs and e-mail addresses are never translated. |
| Validation | Every 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 detection | When 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 translation | Choose items and languages, see a cost estimate, start: a background run with progress, pause, resume and cancel. |
| Side-by-side review | Original and translation next to each other, every field, right to left where needed. |
| On the site | Language switcher (block, shortcode, widget), hreflang alternate links with x-default, and the lang attribute of translated pages. |
| Per language | Name, locale, direction, formality, tone and the slug policy (transliterate, translated title, or original slug + code). |
| Products | WooCommerce duplicate of the product (price, images, variations), translated texts and custom attributes, categories mapped to their translations. |
| Arabic | Arabic as a source and as a target, right to left screens, the plugin translated into Arabic. |
Requirements
| Item | Details |
|---|---|
| WordPress | 6.0 or newer |
| PHP | 7.4 or newer |
| Also | Optional: WooCommerce 8.0+ for products; Yoast SEO, Rank Math, SEOPress or AI SEO Meta Generator for SEO fields |
| An AI provider | An 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. |
| License | GPL-2.0-or-later |
Install
- Unzip the package you downloaded. Inside is
ai-post-and-product-translator.zip(do not unzip this one). - In WordPress open Plugins → Add New Plugin → Upload Plugin, choose
ai-post-and-product-translator.zipand press Install Now. - Press Activate Plugin.
- Open Settings → AI Translator → AI connection, choose your provider, paste your API key and press Test the connection.
Connect your AI
| Field | Meaning |
|---|---|
| Provider | OpenAI-compatible (OpenAI, OpenRouter, Azure, Groq, Ollama, LM Studio...) or Anthropic. |
| API address | Leave empty for the official address. For another service enter it, for example http://localhost:11434/v1. |
| API key | Stored in your database (never shown again). You can define it in wp-config.php instead and the field disappears. |
| Model | The model name at your provider. A small, cheap model is enough for most tasks. |
| Maximum answer length | Caps the tokens of one answer, so a request cannot cost more than you expect. |
| Daily limit | The number of requests the plugin may make per day (0 = no limit). When it is reached the plugin stops asking until tomorrow. |
| Privacy | Hides e-mail addresses, phone numbers and card-like numbers before the text is sent. |
Languages and glossary
| Option | Meaning |
|---|---|
| Formality | Default, formal (polite forms of address) or informal. |
| Tone | A few words added to the instructions, for example “warm, simple”. |
| Slug of new translations | Transliterate 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). |
| Glossary | One 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 translate | One word or phrase per line, case sensitive: brand names, product names. |
Translate one item
Review side by side
When the original changes
Bulk translation
What is protected and checked
| Kept as it is | How |
|---|---|
| Block markup | Block 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 media | Every href, src and srcset stays byte for byte; link texts are translated, the addresses are not. |
| Inline formatting | Bold, 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, scripts | Shortcodes, <code>, <pre>, scripts, styles, SVG and embeds are never sent. |
| Your words | The 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 glossary | A glossary term is replaced by your translation of it, always. |
| Translated | Text between tags, heading texts, button and link labels, list items, and (switches) the alt, title, aria-label and placeholder attributes. |
WooCommerce products
| Part | Behaviour |
|---|---|
| Custom attributes | Names and values translated (switch). Attributes used for variations are kept so the variations keep working. |
| Global attributes and categories | The 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). |
| Images | The same media files; the alt text of the media library item is shared by all languages and is not changed. |
| Prices and stock | Copied once; later changes are not synchronised. |
On the site: switcher and hreflang
[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.With WPML or Polylang
The settings
| Option | Meaning |
|---|---|
| Language of the original content | The language of your posts (a post can have its own). |
| Content types | Posts, pages, products and other public types. |
| What is translated | SEO fields, image alt texts, other attributes, product attributes, product codes kept. |
| Categories and tags | Use linked translated terms, otherwise the original; or translated terms only. |
| On the site | Alternate links, x-default, page language. |
| When WPML or Polylang is active | Copy-out only, or the API mode. |
| Text per request | Characters per AI request; long posts are sent in several. |
| Longest item | Items with more text are refused. |
| Largest bulk run | Translations one bulk run may create. |
| Who can start bulk runs | Editors and administrators, or administrators only. |
| Prices of tokens | Only used for the estimate. |
Keep the cost low
| Tip | Why |
|---|---|
| Try one item first | Check the style and the glossary before a bulk run. |
| Use a mid-size model | Very small models break placeholders more often; a refused answer costs a request. |
| Keep the daily limit | The run pauses by itself and continues when you resume it. |
| Translate the outdated ones only | Items with an up-to-date translation are skipped. |
Privacy
Who can do what
| Who | Can |
|---|---|
| Administrators | Settings, AI connection, languages and glossary. |
| Editors and administrators (setting) | Bulk runs. |
| A user who may edit the original and create items of its type | Translate it, translate again, review. |
| A user who may publish the translation | Apply a waiting update to a published translation. |
| Others | Nothing: every action checks a security token and these permissions. |
Arabic and right to left
Limits
| Limit | Detail |
|---|---|
| Accuracy | The 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 system | No language prefixes in URLs, no translated menus, theme strings or widgets, no automatic language redirect. |
| Block JSON | Text kept inside block settings (JSON) is not translated. |
| Media | The alt text of a media library item is shared and not translated; alt texts written inside the content are. |
| Variations | Variation attributes and their values are not translated. |
| Sync | Prices, stock and images are copied once, not synchronised. |
| SEO plugins | Only 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 Polylang | Interfaces checked in their documentation, not run on our test site. |
| Background runs | Use WP-Cron; on a site without visits keep the page open. |
| Page direction | The 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 items | One 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
// 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
| Problem | What to do |
|---|---|
| The AI answer was refused | The model broke the placeholders or added markup. Try again, use a stronger model, or split very long paragraphs. |
| The AI service answered 401 | The key is wrong or has no access to the model. |
| The daily limit is reached | Raise it in the AI connection tab or wait until tomorrow; a bulk run resumes where it stopped. |
| This item has more characters than the limit | Raise “Longest item” in the settings. |
| The switcher does not show | Only published translations are linked, and only when WPML or Polylang is not active. |
| The category is the original one | Link the category to its translation on the edit screen of the category. |
| The bulk run does not move | WP-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.