Title: WPMMCC
Author: wpmmcc
Published: <strong>2025 年 12 月 15 日</strong>
Last modified: 2026 年 3 月 20 日

---

搜索插件

![](https://ps.w.org/wpmmcc/assets/banner-772x250.png?rev=3487300)

![](https://ps.w.org/wpmmcc/assets/icon-256x256.png?rev=3487300)

# WPMMCC

 作者：[wpmmcc](https://profiles.wordpress.org/wpmmcc/)

[下载](https://downloads.wordpress.org/plugin/wpmmcc.2.0.1.zip)

 * [详情](https://cn.wordpress.org/plugins/wpmmcc/#description)
 * [评价](https://cn.wordpress.org/plugins/wpmmcc/#reviews)
 *  [安装](https://cn.wordpress.org/plugins/wpmmcc/#installation)
 * [开发进展](https://cn.wordpress.org/plugins/wpmmcc/#developers)

 [支持](https://wordpress.org/support/plugin/wpmmcc/)

## 描述

WPMMCC is a full-featured multilingual plugin that translates your WordPress content
automatically and serves each language at its own URL. It works in two modes:

 * **Directory mode** — one WordPress site, multiple language prefixes (example.
   com/en/, example.com/zh/)
 * **Multisite mode** — each language runs as a separate site in a WordPress Multisite
   network

No page builders required. No manual copying of posts. Configure your language groups,
pick a translation provider, and let the background queue handle the rest.

#### What Gets Translated

**Posts, Pages & Custom Post Types**
 Title, content, excerpt, and any custom fields
you configure. Shadow copies of translated posts are stored on the same WordPress
installation and served at the correct language URL automatically.

**Media Attachments**
 Alt text, caption, and description fields for images and 
other attachments.

**Categories & Tags (Taxonomies)**
 Translate category names, tag names, descriptions,
and slugs into each target language.

**Theme Strings**
 Scan your active theme’s PHP files, JavaScript, Twig templates,
and database-stored strings. Translated strings are served transparently through
WordPress filter hooks.

**SEO Meta Fields**
 Translate Yoast SEO, Rank Math, and other SEO plugin fields
alongside your content. Scan, add, enable, or disable individual meta fields per
site group.

#### Translation Providers

Choose one or more providers per translation rule. Each rule maps a source language
to a target language with a specific vendor:

 * **Google Translate** — fast, broad language coverage
 * **DeepL** — high quality, especially for European languages
 * **Baidu Translate** — optimised for Chinese
 * **Youdao** — alternative for Chinese language pairs
 * **OpenAI / compatible LLMs** — context-aware, customisable prompt, supports any
   OpenAI-compatible endpoint (e.g. Azure OpenAI, local models)

#### Background Task Queue

Translations run as background jobs so large sites never time out. Built on Action
Scheduler (bundled, table-prefixed to avoid conflicts with WooCommerce). Monitor
progress, cancel, retry, or manually trigger jobs from the Tasks screen.

#### SEO & URL Management

 * Automatic `hreflang` link tags for every translated page
 * Canonical URL management with proper trailing-slash handling
 * Multilingual XML sitemaps — shadow copies are excluded from the main sitemap;
   child language sitemaps use correct language-prefixed URLs
 * Compatible with Yoast SEO, Rank Math, and other SEO plugins

#### Frontend Shortcodes

Use these shortcodes anywhere on your site:

 * `[wpmmcc_ml_current_language]` — outputs the current page’s language code
 * `[wpmmcc_ml_site_group_type]` — outputs the group type (directory / multisite)
 * `[wpmmcc_ml_language_switcher]` — renders a language switcher link list
 * `[wpmmcc_ml_language_items]` — outputs all available languages as a JSON array
 * `[wpmmcc_ml_canonical]` — outputs the canonical `<link>` tag for the current 
   page
 * `[wpmmcc_ml_hreflang]` — outputs all `<link rel="alternate" hreflang="...">` 
   tags

#### Admin Enhancements

 * Site filter dropdowns on the Posts, Pages, Media, Categories, and Comments admin
   list screens — filter any list by language site with one click
 * Translation management screen — view, filter, and delete translation relations
 * Bulk translation directly from the admin post list

#### Requirements

 * WordPress 5.3 or higher
 * PHP 7.2 or higher
 * MySQL 5.7 or MariaDB 10.2
 * PHP extensions: openssl, json, mbstring, curl

#### Compatibility

**Core Platform Compatibility**

 * Minimum supported WordPress version: 5.3
 * Tested up to WordPress 6.9
 * Minimum supported PHP version: 7.2
 * Works on both single-site WordPress installs and WordPress Multisite networks

**Site Mode Compatibility**

 * **Directory mode** works on a standard single-site WordPress install and serves
   translated content under language-prefixed URLs such as `/zh/` or `/fr/`
 * **Multisite mode** requires a WordPress Multisite network and maps each language
   to its own site in the network

**SEO Plugin Compatibility**

 * Built to work alongside Yoast SEO and Rank Math
 * SEO meta translation is field-based, so supported meta keys can be scanned, enabled,
   disabled, and translated from the SEO Fields screen
 * Canonical and `hreflang` output can be handled either by WPMMCC or by your SEO
   plugin, depending on your settings
 * No fixed version matrix is published for third-party SEO plugins; compatibility
   is maintained at the integration level rather than by pinning specific vendor
   versions in this readme

**Operational Notes**

 * Translation jobs run through a bundled Action Scheduler build with prefixed tables
   to reduce conflicts with WooCommerce or other plugins that ship their own Action
   Scheduler copy
 * Block themes are supported when the active theme exposes standard WordPress block-
   theme files such as `theme.json`, `templates`, or `parts`
 * API-based translation requires outbound HTTPS access from your server to the 
   provider you configure

### External Services

This plugin connects to third-party translation and AI services to provide translation
functionality. No data is sent to any service until you explicitly test a provider/
model or run a translation job. Long fields may be split into multiple outbound 
requests so WPMMCC can respect provider limits and merge translated fragments back
locally before saving. Below is a list of all external services used:

#### Google Translate API

 * **Purpose**: Automatic translation of content
 * **Data sent**: Text content to be translated, source and target language codes
 * **When**: When the user tests a Google translation rule or initiates translation
   using Google as the provider
 * **Service URL**: https://translation.googleapis.com/language/translate/v2
 * **Content handling**: WPMMCC splits oversized plain text or HTML-heavy fields
   locally before sending text fragments to Google
 * **Terms of Service**: https://cloud.google.com/terms/service-terms
 * **Privacy Policy**: https://policies.google.com/privacy

#### DeepL API

 * **Purpose**: Automatic translation of content
 * **Data sent**: Text content to be translated, source and target language codes
 * **When**: When the user tests a DeepL translation rule or initiates translation
   using DeepL as the provider
 * **Service URL**: https://api.deepl.com/v2/translate or https://api-free.deepl.
   com/v2/translate
 * **Content handling**: WPMMCC chunks large fields before calling the DeepL text-
   translation endpoint; HTML-aware splitting is handled locally in the plugin
 * **Terms of Service**: https://www.deepl.com/pro-license
 * **Privacy Policy**: https://www.deepl.com/privacy

#### Baidu Translate API

 * **Purpose**: Automatic translation of content
 * **Data sent**: Text content to be translated, source and target language codes
 * **When**: When the user tests a Baidu translation rule or initiates translation
   using Baidu as the provider
 * **Service URL**: https://fanyi-api.baidu.com/ait/api/aiTextTranslate
 * **Authentication**: `Authorization: Bearer API_KEY` or APP ID + MD5 sign
 * **Official documentation**: https://fanyi-api.baidu.com/doc/21
 * **Service requirement**: The Baidu credentials used by WPMMCC must have AI Text
   Translate enabled
 * **HTML handling**: When the source contains HTML, WPMMCC sends the request with`
   model_type=nmt` and `tag_handling=1`
 * **Terms of Service**: https://fanyi-api.baidu.com/doc/5
 * **Privacy Policy**: https://fanyi-api.baidu.com/doc/21

#### Youdao Translate API

 * **Purpose**: Automatic translation of content
 * **Data sent**: Text content to be translated, source and target language codes
 * **When**: When the user tests a Youdao translation rule or initiates translation
   using Youdao as the provider
 * **Service URL**: https://openapi.youdao.com/translate_html
 * **Authentication**: App ID + App Secret using the official `signType=v3` signature
 * **Official documentation**: https://ai.youdao.com/DOCSIRMA/html/trans/api/wyfy/
   index.html
 * **Service requirement**: The Youdao account must have the Webpage Translation
   service enabled
 * **Content mode**: WPMMCC uses this endpoint for both plain text and HTML so tag-
   preserving translation can use one provider flow
 * **Terms of Service**: https://ai.youdao.com/doc.s#guide
 * **Privacy Policy**: https://ai.youdao.com/doc.s

#### OpenAI API (or compatible)

 * **Purpose**: AI-powered translation using large language models
 * **Data sent**: Text content chunks to be translated, translation prompts, source
   and target language context, and optional `max_tokens`
 * **When**: When the user tests an LLM model/rule or initiates translation using
   the LLM provider
 * **Service URL**: Configurable (default: https://api.openai.com/v1/chat/completions)
 * **Content handling**: WPMMCC chunks long source content locally and asks the 
   remote model to return translated strings in the same order, preserving placeholders
   and HTML markup
 * **Terms of Service**: https://openai.com/policies/terms-of-use
 * **Privacy Policy**: https://openai.com/policies/privacy-policy

**Note**: Users must configure their own API keys for these services. API keys are
stored encrypted using AES-256 encryption in your database and are never logged 
or exposed in plain text.

### Privacy Policy

WPMMCC respects your privacy and handles data responsibly:

 * **Translation Data**: Content sent to translation providers is processed according
   to each provider’s privacy policy
 * **API Keys**: Stored encrypted in your database, never transmitted except to 
   the respective provider
 * **No Tracking**: The plugin does not track usage or send data to our servers
 * **Local Processing**: All other operations are performed locally on your server

For more information, please review the privacy policies of your chosen translation
providers.

### Credits

WPMMCC uses the following open-source libraries:

 * Action Scheduler (ASRunner 3.9.99-wpmmcc) – Consolidated build based on Action
   Scheduler 3.9.0, prefixed tables (`wpmmcc_actionscheduler_*`), defers to external
   Action Scheduler instances (e.g. WooCommerce) when present.
 * WordPress Coding Standards – Code quality

### Support

 * Documentation: [Plugin Documentation](https://www.wpmm.cc/docs)

### Contributing

We welcome contributions! Please see our GitHub repository for:

 * Bug reports
 * Feature requests
 * Pull requests
 * Translation contributions

## 屏幕截图

 * [[
 * Sites – Create and manage your multilingual site structure, language groups, 
   and main/child site relationships
 * [[
 * Translation Rules – Configure machine translation vendors, LLM models, and source/
   target language rules
 * [[
 * Theme Translation – Scan your active theme and review translated theme strings
 * [[
 * Task Queue – Monitor translation progress, retries, and execution status for 
   background jobs
 * [[
 * Translation Fields – Choose which post, media, and taxonomy fields should be 
   translated
 * [[
 * Parameters – Control plugin-wide behavior such as canonical URLs, hreflang output,
   uninstall retention, and logging

## 安装

#### Automatic Installation

 1. Go to **Plugins > Add New** in your WordPress admin
 2. Search for “WPMMCC”
 3. Click **Install Now** and then **Activate**

#### Manual Installation

 1. Download the plugin ZIP file
 2. Go to **Plugins > Add New > Upload Plugin**
 3. Upload the ZIP file and click **Install Now**
 4. Activate the plugin

#### First-Time Setup

 1.  Go to **WPMMCC > Sites** and click **Add New**
 2.  Choose your group type: **Directory** (single site, language prefixes) or **Multisite**
 3.  Add a site entry for each language. Mark one as the **Main Site**
 4.  Go to **WPMMCC > Machine translation** or **WPMMCC > LLM translation** and click**
     Add Rule**
 5.  Save vendor credentials or LLM model details first, then select source language,
     target language, and request limits
 6.  Click **Test Rule** or test the model configuration to verify the remote service
     works
 7.  Go to **WPMMCC > Translation Fields** to choose which post fields to translate
 8.  On any post list screen, select posts and use **Bulk Translate** to start translating
 9.  Monitor progress at **WPMMCC > Tasks**

#### Admin Workflow Guide

After activation, the plugin adds a top-level **WPMMCC** menu in the WordPress admin.
The main administrator workflow is:

 1.  Configure site structure in **WPMMCC > Sites**
 2.  Configure providers and rules in **WPMMCC > Machine translation** or **WPMMCC 
     > LLM translation**
 3.  Choose translatable fields in **WPMMCC > Translation Fields**
 4.  Optionally configure SEO fields in **WPMMCC > SEO Fields**
 5.  Start translations from the post, media, or taxonomy list screens using **Bulk
     Translate**
 6.  Monitor or manage queued jobs in **WPMMCC > Tasks**
 7.  Review relations in **WPMMCC > Translation management**
 8.  Configure sitemap output in **WPMMCC > Sitemap**
 9.  Adjust global behavior in **WPMMCC > Parameters**

#### Admin Pages

**WPMMCC > Sites**

 * Create and manage site groups
 * Add, edit, or remove language sites
 * Configure whether a group runs in **directory** mode or **multisite** mode
 * Set the main site for each language group

**WPMMCC > Machine translation**

 * Create translation rules for Google, DeepL, Baidu, or Youdao
 * Save provider credentials on the vendor settings screen, then define source language,
   target language, and the per-rule **Maximum characters per request**
 * Long text is split automatically on line, sentence, and word boundaries before
   sending requests, then merged back into the final translated field
 * Test rule connectivity before saving

**WPMMCC > LLM translation**

 * Register OpenAI-compatible models and endpoints
 * Create LLM-based translation rules with model, prompt, temperature, and **Maximum
   response tokens**
 * `Maximum response tokens` is passed to the API as the model’s response cap; long
   source content is still chunked automatically before translation and merged back
   after the response returns
 * Test model configuration from the admin interface

**WPMMCC > Theme**

 * Scan active-theme strings from PHP, JavaScript, templates, and database-backed
   theme content
 * Trigger automatic theme translation for a selected site
 * Review, search, edit, or manually add theme translation entries

**WPMMCC > Tasks**

 * **Task list** tab: monitor background jobs, inspect status, filter by group or
   site, and perform operations such as retry, delete, or manual execution where
   available
 * **Task settings** tab: adjust queue batch size, concurrency, overwrite behavior,
   retry behavior, and related execution settings

**WPMMCC > Translation management**

 * Review translation relations across posts, media, and terms
 * Filter by object type, group, or site
 * Delete single relations or remove them in bulk

**WPMMCC > Sitemap**

 * Configure sitemap output format and per-group sitemap generation
 * Verify generated multilingual sitemap links from the admin screen

**WPMMCC > Parameters**

 * Control global plugin behavior such as canonical output, `hreflang`, uninstall
   retention, logging, and related plugin-wide options

#### Admin List Screen Operations

The plugin also extends standard WordPress list screens used by administrators and
editors:

 * **Posts / Pages**: select content rows and use **Bulk Translate** to create translation
   tasks
 * **Media Library**: bulk translate attachment metadata such as alt text, caption,
   and description
 * **Categories / Tags**: bulk translate taxonomy terms and their descriptions/slugs
 * **Comments, Posts, Pages, Media, Categories**: use the **Site** filter dropdown
   to view content belonging to a specific translated site
 * **Post edit screen**: use the WPMMCC meta box to inspect or adjust site-related
   translation context

#### Typical Admin Tasks

**Translate posts or pages**

 1. Open **Posts** or **Pages**
 2. Select one or more items
 3. Choose **Bulk Translate**
 4. Select the target site/language
 5. Confirm and monitor progress in **WPMMCC > Tasks**

**Translate theme strings**

 1. Open **WPMMCC > Theme**
 2. Select the target site
 3. Run **Scan and translate**
 4. Wait for queue completion in **WPMMCC > Tasks**
 5. Return to **WPMMCC > Theme** to review or edit results

**Translate SEO fields**

 1. Open **WPMMCC > SEO Fields**
 2. Scan available meta fields for the selected group
 3. Enable the fields you want to translate
 4. Run post/page translations as usual

**Review translation relations**

 1. Open **WPMMCC > Translation management**
 2. Filter by type or site if needed
 3. Delete stale or unwanted relations
 4. Re-run translation for the affected content if you need to recreate them

#### Site Owner Guide

This section is intended for site owners, operators, and project managers who are
responsible for launching and maintaining a multilingual site, but may not work 
with WordPress internals every day.

**Before You Launch**

 * Confirm your permalink structure is enabled and working correctly before setting
   up directory-mode language URLs
 * Decide whether your project should use **directory mode** or **multisite mode**
   before you begin translating live content
 * Prepare valid API credentials for your chosen translation provider
 * Decide which content types need translation first: posts, pages, media, taxonomy
   terms, theme strings, and SEO fields
 * If you already use Yoast SEO or Rank Math, decide whether WPMMCC or your SEO 
   plugin should output canonical and `hreflang` tags

**Recommended Launch Order**

 1. Create the site group and language sites
 2. Create and test the translation rule
 3. Enable the content fields and SEO fields you want translated
 4. Translate a small set of test pages first
 5. Check frontend URLs, page titles, metadata, canonical tags, and `hreflang`
 6. Scan and translate theme strings
 7. Translate the remaining content in batches
 8. Review sitemap output before announcing the multilingual site publicly

**Daily Use For Site Owners**

 * Publish or update content on the source site first
 * Send new or changed content to translation from the relevant list screen
 * Check **WPMMCC > Tasks** to make sure jobs complete successfully
 * Review a few translated pages on the frontend, especially high-value landing 
   pages
 * Re-scan theme strings after theme changes, theme updates, or menu/widget updates

**When You Should Re-Run Translation**

 * After changing the source post title, content, or excerpt
 * After updating featured image metadata or attachment alt text
 * After editing category/tag names, descriptions, or slugs
 * After changing SEO titles, meta descriptions, or enabled SEO fields
 * After switching themes or updating theme templates, menu labels, widgets, or `
   theme.json` content

**SEO Checklist For Site Owners**

 * Verify each translated page resolves on its correct language URL
 * Confirm canonical tags point to the localized page you expect
 * Confirm `hreflang` tags include the right language variants
 * Check that translated pages are indexable if you want them in search engines
 * Review generated sitemap URLs after major translation batches

**Operations And Safety**

 * Keep **Keep data on uninstall** enabled if you want to preserve translation data
   during maintenance or reinstallation
 * Use staging first when changing translation providers, queue settings, or site
   structure on an established production site
 * Translate in batches for large sites rather than sending all content at once
 * Monitor provider usage limits, quotas, and billing in the provider’s own dashboard

**Common Issues To Check First**

 * If translated pages do not appear, review **WPMMCC > Tasks** for failed or pending
   jobs
 * If translated URLs return 404, re-save permalinks and confirm the site group 
   is configured correctly
 * If SEO metadata is not translated, re-scan and enable the relevant field in **
   WPMMCC > SEO Fields**
 * If menus, widgets, or theme labels remain untranslated, run a theme scan again
   from **WPMMCC > Theme**
 * If a language variant looks outdated, re-run translation for the affected source
   content

#### Admin Roles And Typical Responsibilities

WPMMCC is primarily designed for administrators or site managers with permission
to configure translation providers, site groups, queue settings, and SEO behavior.

**Administrator responsibilities**

 * Create site groups and child sites
 * Configure machine-translation or LLM providers
 * Enable translatable content fields and SEO fields
 * Control sitemap, canonical, `hreflang`, uninstall-retention, and queue settings
 * Review translation relations and remove invalid mappings when necessary
 * Run theme scans, delete theme translations, and manage manual theme translation
   entries

**Content editor responsibilities**

 * Publish or update source content
 * Trigger bulk translation from supported content list screens when permissions
   allow
 * Review translated output on the frontend
 * Report broken links, missing strings, or outdated translations back to the site
   administrator

#### Translation Data Flow

At a high level, WPMMCC processes multilingual content in the following order:

 1. The administrator defines a **site group**, target sites, and a translation rule
 2. Source content is selected from a post, media, or taxonomy list screen
 3. WPMMCC creates background tasks in the queue
 4. The selected translation provider translates enabled content fields
 5. WPMMCC writes translated objects to the target site context
 6. WPMMCC records the source-to-target mapping in the translation relations table
 7. Frontend hooks resolve the correct translated URL, metadata, and theme strings 
    for the visitor

**For posts and pages**

 * The plugin reads enabled source fields such as title, content, excerpt, and selected
   SEO meta
 * A translation task is queued and executed in the background
 * In directory mode, translated content is stored as a shadow post on the same 
   WordPress install and served under the language-prefixed URL
 * In multisite mode, translated content is written into the corresponding target
   site
 * The translation relation is stored so WPMMCC can connect the source object to
   the translated object later

#### Translation Rule Sizing And Long-Content Handling

WPMMCC applies translation-rule sizing differently for machine providers and LLM
providers:

 * **Machine translation rules** use **Maximum characters per request** as the main
   request-size control
 * The effective machine-request size is the lower of the rule value and the provider
   hard limit built into the plugin
 * **LLM translation rules** use **Maximum response tokens** as the API `max_tokens`
   value; this affects the model output budget, not the source-text chunk size directly
 * Long source fields are chunked automatically before dispatch so large posts, 
   excerpts, SEO fields, and theme strings can still be translated safely

When long content is translated, WPMMCC currently follows this flow:

 1. It calculates the effective per-request character budget for the selected rule/
    provider
 2. It tries to split long plain text on line breaks, sentence boundaries, and word
    boundaries
 3. If the field contains HTML, it keeps tag structure balanced while chunking so translated
    fragments can be merged back into valid markup
 4. It sends the resulting fragments to the provider in order
 5. It validates the returned fragment count and fills any missing pieces with original
    content when necessary
 6. It merges translated fragments back into a single field value before saving the
    translated object

This means:

 * Lowering machine-rule length gives you more conservative, smaller requests
 * Raising machine-rule length cannot exceed the provider hard limit enforced by
   the plugin
 * Increasing LLM response tokens can help with longer answers from the model, but
   it does not replace the plugin’s source-content chunking
 * Very large HTML fields are translated fragment-by-fragment and then reassembled
   in order

**For media**

 * The plugin translates attachment metadata such as alt text, caption, and description
 * The translated media relation is tracked so the translated parent content can
   resolve the correct localized media information

**For categories and tags**

 * The plugin translates taxonomy names, descriptions, and slugs
 * Term relations are stored separately so frontend category/tag links can remain
   localized

**For theme strings**

 * WPMMCC scans the active theme for translatable strings in files, menus, widgets,
   and selected database-backed theme content
 * The scan creates theme-translation tasks, which are then translated and cached
   for frontend use
 * Theme translations are loaded dynamically for the current site/language combination
   rather than being treated like normal posts

#### Managing Translated Content After Translation

WPMMCC does not stop at initial translation. The plugin also provides ongoing translated-
content management tools:

**Translation management page**

 * Open **WPMMCC > Translation management**
 * View source-to-target mappings for posts, pages, media, categories, and tags
 * Filter by object type, group, or search term
 * Delete stale relations individually or in bulk

**Translated post and term maintenance**

 * Re-run translation when source content changes significantly
 * Use the admin **Site** filter on posts, pages, media, categories, and comments
   to inspect content by language site
 * Review frontend output after major source edits, taxonomy changes, or SEO-field
   changes

**Queue-based management**

 * Open **WPMMCC > Tasks**
 * Inspect pending, running, completed, or failed jobs
 * Retry or manually run tasks where the interface allows
 * Tune task settings when you need smaller batches or more conservative execution

#### Theme Scan, Manual Add, And Edit Workflow

Theme translations have their own management workflow because they are not stored
like regular post content.

**Theme scan workflow**

 1. Open **WPMMCC > Theme**
 2. Select the group and child site you want to manage
 3. Choose a scan mode:
 4.  * **Overwrite existing translations**: regenerate and replace existing theme translations
       for that site
     * **Only add new content**: keep existing translated entries and only add strings
       that were not translated before
 5. Click **Scan and translate**
 6. Track progress in **WPMMCC > Tasks**

**Manual theme translation entry**

On the Theme page, administrators can click **Add manually** and enter:

 * **Source identifier**: a label used to distinguish the manual entry
 * **Original content**: the source text
 * **Translated content**: the target-language text

This is useful when:

 * a theme string is not discovered automatically
 * a site owner wants to override an automatic result
 * a small number of strings should be curated manually

**Editing existing theme translations**

 * Use the Theme page results list to locate an existing translation entry
 * Open the edit view
 * Update the original text or translated text
 * Save the entry so the frontend can use the revised translation

**Deleting theme translations**

 * Administrators can delete all theme translations for the selected child site 
   from **WPMMCC > Theme**
 * This is useful after a theme switch, a large redesign, or when a full re-scan
   is preferred over incremental cleanup

## 常见问题

### What translation providers are supported?

Google Translate, DeepL, Baidu Translate, Youdao, and OpenAI (or any OpenAI-compatible
endpoint). You can create multiple rules and use different providers for different
language pairs.

### Where do I get an API key?

Each provider issues its own key from its developer console:

 * **Google Translate**: [Google Cloud Console](https://console.cloud.google.com/)—
   enable the Cloud Translation API, create credentials
 * **DeepL**: [DeepL Pro](https://www.deepl.com/pro) — the free tier (DeepL API 
   Free) is supported
 * **Baidu Translate**: [Baidu Fanyi API](https://fanyi-api.baidu.com/) — use the
   AI Text Translate API (`https://fanyi-api.baidu.com/ait/api/aiTextTranslate`),
   create an APP ID, and authenticate with either a Secret Key or an API Key
 * **Youdao**: [Youdao AI Open Platform](https://ai.youdao.com/) — use the Webpage
   Translation API (`https://openapi.youdao.com/translate_html`), create an app,
   and obtain App ID and App Secret
 * **OpenAI**: [OpenAI Platform](https://platform.openai.com/) — create an API key;
   any OpenAI-compatible endpoint (including self-hosted models) is supported via
   the configurable API URL field

### How should I configure maximum characters and maximum response tokens?

Use the two settings for different purposes:

 * **Maximum characters per request** applies to machine-translation rules such 
   as Google, DeepL, Baidu, and Youdao
 * Choose a value that is at or below the vendor’s supported request size; smaller
   values are safer when translating very large or HTML-heavy content
 * **Baidu AI Text Translate** uses `https://fanyi-api.baidu.com/ait/api/aiTextTranslate`;
   when HTML is detected the plugin requests `model_type=nmt` with `tag_handling
   =1`
 * Baidu AI Text Translate documentation: `https://fanyi-api.baidu.com/doc/21`
 * Baidu credentials must have the AI Text Translate service enabled before WPMMCC
   can translate content successfully
 * **Youdao Webpage Translation** uses `https://openapi.youdao.com/translate_html`
   for both plain text and HTML, and the account must have the Webpage Translation
   service enabled
 * Youdao Webpage Translation documentation: `https://ai.youdao.com/DOCSIRMA/html/
   trans/api/wyfy/index.html`
 * **Maximum response tokens** applies to LLM rules only and is sent as `max_tokens`
 * Set LLM response tokens to `0` if you want the remote model to decide automatically
 * Long source content is chunked automatically by WPMMCC even when `max_tokens`
   is `0`

### How are bundled language files and translations loaded?

WPMMCC ships bundled language files in the plugin’s `/languages` directory.

 * If you set a plugin locale override in **WPMMCC > Parameters**, WPMMCC first 
   tries to load the bundled `wpmmcc-<locale>.mo` file directly
 * If no override is set, WPMMCC uses the active WordPress locale and falls back
   to normal `load_plugin_textdomain()` behavior
 * This means packaged translations can work immediately after install, while external
   WordPress language packs remain compatible with the normal textdomain flow

### Why can a provider test fail even when I entered credentials?

The most common causes are configuration prerequisites rather than a PHP error:

 * The provider service is not enabled on the vendor side yet, for example **Baidu
   AI Text Translate** or **Youdao Webpage Translation**
 * Your server cannot make outbound HTTPS requests to the provider API
 * The selected source/target language codes are not accepted by that provider
 * For LLM providers, the model record is incomplete and still misses API URL, API
   key, or model name

### How are long HTML fields translated safely?

WPMMCC does not send a whole long post body blindly in one request.

 * Plain text is split on line, sentence, and word boundaries
 * HTML content is chunked with balanced-tag handling so fragments can be reassembled
   into valid markup
 * Fragments are sent in order and merged back in order
 * If a provider returns fewer fragments than expected, WPMMCC keeps the field aligned
   by falling back to the original fragment where necessary

### Can I use this with WordPress Multisite?

Yes. WPMMCC supports two multisite configurations:

 * **Directory mode**: Single WordPress install, language directories (example.com/
   en/, example.com/zh/). No Multisite needed.
 * **Multisite mode**: Each language is a separate site in the network. WPMMCC links
   them through site groups.

### How does directory mode work?

In directory mode, WPMMCC creates “shadow” posts for each translated language. When
a visitor goes to `/zh/my-post/`, WordPress serves the shadow post’s translated 
content. Hreflang and canonical tags are injected automatically. Your original content
remains untouched.

### Does it work with my SEO plugin?

Yes. WPMMCC is tested with Yoast SEO and Rank Math. You can disable WPMMCC’s own
canonical and hreflang output from **WPMMCC > Parameters** if you prefer your SEO
plugin to handle those tags. The SEO Fields screen lets you translate Yoast/Rank
Math meta fields alongside post content.

### Which WordPress and PHP versions are supported?

WPMMCC requires **WordPress 5.3+** and **PHP 7.2+**. The current release is tested
up to **WordPress 6.9**. It supports both standard single-site installations and
WordPress Multisite networks.

### Which versions of Yoast SEO or Rank Math are supported?

WPMMCC integrates with Yoast SEO and Rank Math at the metadata and frontend output
level, but this readme does not promise a strict per-version compatibility matrix
for those third-party plugins. Instead, WPMMCC provides an SEO field scanner so 
supported meta fields can be discovered and translated even as SEO plugin internals
evolve.

### How does the task queue work?

Translation jobs are processed in the background via WordPress Action Scheduler (
a bundled copy with prefixed table names, so it does not conflict with WooCommerce’s
copy). Each page load triggers a queue check. You can also run tasks manually or
adjust batch size and concurrency from the **Task settings** tab under **WPMMCC 
> Tasks**.

### What shortcodes are available?

Six shortcodes are included:

 * `[wpmmcc_ml_current_language]` — current language code (e.g. `ZH-CN`)
 * `[wpmmcc_ml_site_group_type]` — group type string (`directory` or `multisite`)
 * `[wpmmcc_ml_language_switcher]` — language switcher `<ul>` with links to all 
   translations of the current page
 * `[wpmmcc_ml_language_items]` — JSON array of all languages in the group (useful
   for custom JS integrations)
 * `[wpmmcc_ml_canonical]` — renders `<link rel="canonical" href="...">` for the
   current page
 * `[wpmmcc_ml_hreflang]` — renders all `<link rel="alternate" hreflang="...">` 
   tags

### Can I translate media, categories, and tags?

Yes. Select attachments, categories, or tags from their respective admin list screens,
then use **Bulk Translate**. Translated alt text, captions, descriptions, and term
names are served automatically on the frontend.

### How do I filter the post list by language?

After translating content, a **Site** dropdown appears above every admin list screen(
Posts, Pages, Media, Categories, Comments). Select a language site to show only 
content associated with that language.

### Can I translate custom post types and taxonomies?

Yes. WPMMCC detects all public post types and taxonomies. Configure which ones to
translate from **WPMMCC > Translation Fields**.

### Is my API key secure?

Yes. API keys are encrypted with AES-256-CBC before being stored in the database.
They are never written to log files or exposed in plain text anywhere in the plugin.

### What happens when upgrading from 0.1.0 or 1.x to 2.0.0?

WPMMCC runs its database migrations automatically when the installed plugin version
is newer than the stored database version.

 * Existing site groups, sites, rules, translation relations, field settings, and
   queue data are preserved during a normal plugin update
 * You do not need to deactivate and reactivate the plugin to finish the upgrade
 * Data is only removed on uninstall when **Keep data on uninstall** is disabled

### What happens to my data if I uninstall?

Deactivating the plugin leaves all data intact. Deleting the plugin triggers the
uninstall routine which removes all plugin tables, options, and meta keys. You can
prevent data deletion by enabling **Keep data on uninstall** in **WPMMCC > Parameters**
before deleting.

### How does upgrading work?

WPMMCC runs pending database migrations automatically on every page load when it
detects the stored database version is older than the installed plugin version. 
You do not need to deactivate and reactivate after updating — simply update via 
the WordPress admin and the upgrade completes on the next page request.

## 评价

此插件暂无评价。

## 贡献者及开发者

「WPMMCC」是开源软件。 以下人员对此插件做出了贡献。

贡献者

 *   [ wpmmcc ](https://profiles.wordpress.org/wpmmcc/)

[帮助将「WPMMCC」翻译成简体中文。](https://translate.wordpress.org/projects/wp-plugins/wpmmcc)

### 对开发感兴趣吗?

您可以[浏览代码](https://plugins.trac.wordpress.org/browser/wpmmcc/)，查看[SVN仓库](https://plugins.svn.wordpress.org/wpmmcc/)，
或通过[RSS](https://plugins.trac.wordpress.org/log/wpmmcc/?limit=100&mode=stop_on_copy&format=rss)
订阅[开发日志](https://plugins.trac.wordpress.org/log/wpmmcc/)。

## 更新日志

#### 2.0.1

 * Fixed: Increased the default timeout used by OpenAI-compatible LLM providers 
   so full article translations are less likely to fall back to the original text
   on slower vendor responses
 * Fixed: Re-validated real-provider article translation flows for OpenAI-compatible
   LLM vendors after the timeout handling update
 * Fixed: Corrected the multisite media failure-path test fixture so release validation
   covers the intended failed-task scenario reliably

#### 2.0.0

 * Improved: Refined compatibility declarations and aligned minimum supported WordPress
   version to 5.3 across the plugin, activation checks, and bundled scheduler metadata
 * Improved: Added detailed administrator, site-owner, and operations documentation
   directly in `readme.txt`, including workflow guides, data-flow notes, and theme-
   translation management instructions
 * Improved: Clarified translation-rule sizing guidance for machine providers and
   LLM providers, including request-length versus response-token behavior, provider
   prerequisites, and long HTML split-and-merge handling
 * Improved: Expanded `readme.txt` notes for bundled language files, plugin-locale
   loading, upgrade retention behavior, and external provider requirements
 * Improved: Reduced admin-side query overhead in term management and sitemap shadow-
   post exclusion paths
 * Improved: Expanded end-to-end regression coverage for multilingual URLs, feeds,
   comments, uninstall behavior, provider integrations, and theme/frontend translation
   probes
 * Fixed: Long-content chunking now preserves plain-text whitespace more reliably
   and keeps HTML fragments balanced before merging translated output back into 
   one field
 * Fixed: Sitemap shadow-post exclusion now uses cached ID resolution with invalidation
   hooks to avoid repeated full meta scans
 * Fixed: Bundled locale files are loaded more reliably when a plugin locale override
   is configured, while normal WordPress textdomain fallback remains available for
   external language packs
 * Fixed: Local plugin validation and full E2E execution were re-verified after 
   the recent admin/performance updates

#### 1.0.1

 * Improved: Add composite lookup indexes for directory-mode virtual site ownership
   on `postmeta` and `termmeta`
 * Improved: Add targeted relation table indexes for source lookup, reverse lookup,
   and per-site scans
 * Fixed: Schema upgrades now track a dedicated database schema version so existing
   sites receive new migrations reliably

#### 1.0.0

 * New: Media translation support — translate alt text, caption, and description
   for attachments
 * New: Taxonomy translation support — translate categories and tags via bulk translation
   queue
 * New: Translation management screen with relation filtering, single delete, and
   bulk delete actions
 * New: Task management operations — cancel, retry, run now, and delete individual
   tasks from the task list
 * New: Extended settings page for task queue configuration (batch size, concurrency,
   time limit, retry settings)
 * New: Translation fields AJAX management — toggle individual fields (title, content,
   excerpt, etc.) per group
 * New: SEO fields UI — scan, add, toggle, and remove custom SEO meta fields for
   translation
 * New: Frontend shortcode support: `[wpmmcc_ml_site_group_type]`, `[wpmmcc_ml_current_language]`,`[
   wpmmcc_ml_language_switcher]`, `[wpmmcc_ml_language_items]`, `[wpmmcc_ml_canonical]`,`[
   wpmmcc_ml_hreflang]`
 * New: Admin list screen site filter dropdowns on posts, pages, media, categories,
   and comments screens
 * New: Sitemap improvements — main site excludes directory-mode shadow copies; 
   child site URLs use correct language-prefixed permalinks
 * New: Silent update support — plugin checks and runs pending database migrations
   on `plugins_loaded`, so upgrades via the WordPress admin apply correctly without
   requiring manual deactivate/reactivate
 * Improved: SiteContext now preserves trailing slash on canonical URLs to match
   WordPress permalink style
 * Improved: `TranslationRelationRepository` — new method for cross-group shadow
   post exclusion in sitemaps
 * Improved: `MachineTranslationVendorTester` — provider test skips credential check
   for providers that require no API key
 * Fixed: Function naming compliance — helper functions `plugin_path`, `plugin_url`,`
   logger` renamed to `wpmmcc_plugin_path`, `wpmmcc_plugin_url`, `wpmmcc_logger`
   to satisfy WordPress.org prefix requirements
 * Fixed: `uninstall.php` — all `LIKE` queries now use `$wpdb->prepare()` with `
   $wpdb->esc_like()` for proper SQL safety
 * Fixed: `uninstall.php` — `wpmmcc_llm_models` table and `wpmmcc_plugin_locale`
   option were missing from the cleanup lists

#### 0.1.1

 * New: Automatic category/tag translation when translating posts
 * New: Display Action Scheduler version info in settings page
 * New: Logging configuration via wp-config.php constants
 * Improved: Term translation filters already-translated terms
 * Fixed: Admin page JavaScript internationalization
 * Changed: Logging disabled by default for production

#### 0.1.0

 * Initial release
 * Site group and site management
 * Content translation (posts, pages, custom post types)
 * Theme translation with file scanning
 * Multiple translation provider support (Google, DeepL, Baidu, Youdao, OpenAI)
 * Task queue with Action Scheduler integration
 * Multilingual XML sitemap generation
 * Hreflang and canonical URL management
 * SEO meta translation
 * Translation rules and field configuration
 * Directory-based URL structure support

## 额外信息

 *  版本 **2.0.1**
 *  最后更新：**2 周前**
 *  活跃安装数量 **不到10**
 *  WordPress 版本 ** 5.3 或更高版本 **
 *  已测试的最高版本为 **6.9.4**
 *  PHP 版本 ** 7.2 或更高版本 **
 *  语言
 * [English (US)](https://wordpress.org/plugins/wpmmcc/)
 * 标签
 * [localization](https://cn.wordpress.org/plugins/tags/localization/)[multilingual](https://cn.wordpress.org/plugins/tags/multilingual/)
   [multisite](https://cn.wordpress.org/plugins/tags/multisite/)[seo](https://cn.wordpress.org/plugins/tags/seo/)
   [translation](https://cn.wordpress.org/plugins/tags/translation/)
 *  [高级视图](https://cn.wordpress.org/plugins/wpmmcc/advanced/)

## 评级

尚未提交反馈。

[添加我的评价](https://wordpress.org/support/plugin/wpmmcc/reviews/#new-post)

[查看全部评论](https://wordpress.org/support/plugin/wpmmcc/reviews/)

## 贡献者

 *   [ wpmmcc ](https://profiles.wordpress.org/wpmmcc/)

## 支持

有话要说吗？是否需要帮助？

 [查看支持论坛](https://wordpress.org/support/plugin/wpmmcc/)