WPML

简介

为什么需要此插件

WPML Export and Import 与您已经使用的 WordPress 导入插件协同工作。导入插件负责移动您的数据。WPML Export and Import 会在最后添加语言信息,以便每一行都能分配到正确的语言,并且每个翻译都能链接到其源内容。

集成

WPML Export and Import 支持以下导出和导入工具:

  • WP All Export Pro 和 WP All Import Pro – 从 WordPress 网站导出时自动包含语言信息,并从 CSV 或 XML 导入文章、产品和分类法。
  • 内置的 WooCommerce 导出/导入工具(产品导出和产品导入)– 通过单个 CSV 移动产品,导出内容中包含语言信息。
  • 内置的 WordPress 导出/导入工具 – 通过 WXR 文件移动文章、页面和自定义文章类型。
  • WP Import Export 插件。
  • 自定义 CSV 或 XML 管道 – 任何能向其行中添加语言列的工具。

旧版 – WPML All Import 插件

WPML All Import 是早于 WPML Export and Import 的旧版插件。该插件不再受支持,也不再被推荐使用。此页面上的步骤是将多语言内容导入 WordPress 网站的最新方法,请使用此方法,而不要使用旧版插件文档中描述的任何工作流。

导出 – 获取导入文件

您导入的所有内容最初都是一个文件。有两种方法可以获取该文件:

  • 从 WordPress 网站导出。使用受支持的导出工具,语言信息将自动随之导出。
  • 自行准备。您的数据存在于电子表格或外部系统(PIM、MLS、ERP、预订平台)中,您需要手动将语言列添加到文件中 – 请参阅“导入”部分中的准备您自己的文件。

配置

从 WordPress 网站导出时,请在该网站上安装并激活:

  • WP All Export Pro(或其他受支持的导出工具)。
  • WPML Export and Import – 它会将语言信息添加到导出的每一行中。

自行准备文件时无需安装任何内容,所有工作都在文件本身中完成。

运行导出

使用您选择的导出工具导出 WordPress 内容。在激活 WPML Export and Import 的情况下,导出文件已经包含每一行的语言列,无需手动添加任何内容。请继续阅读“导入”部分。

导入 – 引入内容

配置

在要导入内容的网站上安装并激活以下插件:

  • 导入插件:WP All Import Pro、内置的 WooCommerce 导入工具、内置的 WordPress 导入器或 WP Import Export。
  • WPML 和 WPML String Translation。
  • WPML Export and Import(此页面涵盖的附加组件)。
  • 如果您要导入 WooCommerce 产品,请安装 WPML Multilingual & Multicurrency for WooCommerce。

使用您计划导入的每种语言设置 WPML。在运行导入之前,目标语言必须已存在于WPML设置语言中。

首次导入向导

首次打开WPMLExport and Import时,一个简短的向导会询问您是从此站点还是从其他网站或系统导出内容。

向导的第一个问题 – 您的内容来自哪里。
向导的第一个问题 – 您的内容来自哪里。

从该站点导出时,向导还会询问您使用的是哪种工具:内置的 WordPress 或 WooCommerce 导出/导入工具、WP All Export 和 WP All Import、WP Import Export 或其他方法。

第二个问题 – 您使用哪种工具从该站点导出。
第二个问题 – 您使用哪种工具从该站点导出。

根据您的回答,页面会显示为您量身定制的三步指南:您的内容如何获取其语言列(对于受支持的工具为自动获取,否则为手动获取)、导入本身,以及返回并运行 WPML 导入的提醒。一旦检测到带有语言信息的导入内容,页面将报告有多少文章和术语正在等待,并显示运行 WPML 导入按钮。

针对来自其他网站或系统的内容的三步指南,以及语言列示例。
针对来自其他网站或系统的内容的三步指南,以及语言列示例。

没有其他需要配置的内容 – 此页面就是该插件的完整界面。

准备您自己的文件 – 电子表格和外部系统

在文件的每一行中添加三列。WPML 就是通过这些列将翻译配对,并为每一行标记正确的语言:

  • _wpml_import_translation_group。一个内容的所有语言版本共享的唯一值。对于产品,请使用 SKU。对于其他内容,请生成您自己的 ID,并在源行及其每个翻译中重复使用该 ID。
  • _wpml_import_language_code。该行的 ISO 语言代码(en 代表英语,es 代表西班牙语,fr 代表法语,pt-pt 代表欧洲葡萄牙语,等等)。
  • _wpml_import_source_language_code。仅用于翻译行;表示原文的语言代码。对于源语言行,请将其留空。

每个翻译组值仅用于一项内容。WPML 会保留其连接的每个项目的组,导入后也是如此。您稍后导入的具有相同组值的行将加入该项目的翻译中。

在文章和产品行中,还有两列是可选的:

  • _wpml_import_after_process_post_status。文章在运行 WPML 导入后获得的状态。请使用 WordPress 状态名称:publish、draft、pending 或 private。请写 publish,而不是 published。
  • _wpml_import_tea。在源行上将其设置为 1 可将该项目发送以进行自动翻译。此列仅在 WPML 的“自动翻译所有内容”模式开启时起作用 – 请参阅自动翻译导入的内容。

让 AI 助手准备文件

您不必手动添加这些列。将您的 CSV 或导出文件连同以下指令一起交给 AI 助手:“向此文件添加 WPML 导入列 _wpml_import_translation_group、_wpml_import_language_code 和 _wpml_import_source_language_code。英语行是原文;通过 SKU 将每个翻译与其原文配对。”助手会在几秒钟内填好这三列。在导入前请检查几行以确认无误。

以下是博客文章的具体示例。该文件有一个 language 列,以及一个 original 列,其中包含某行所翻译的英语文章的标题:

title,content,language,original
Summer Sale,Our summer sale starts on June 1.,English,
Soldes d'été,Nos soldes commencent le 1er juin.,French,Summer Sale

此文件的指令:

Add the columns _wpml_import_translation_group, _wpml_import_language_code and _wpml_import_source_language_code to this CSV. The English rows are the originals. For each English row, make a short ID from its title and use it as the translation group. Give each translation the group of the English row that its original column names. Use the language codes en and fr. Leave the source language empty on English rows, and set it to en on the translations.

结果如下(内容已缩短):

title,content,language,original,_wpml_import_translation_group,_wpml_import_language_code,_wpml_import_source_language_code
Summer Sale,...,English,,summer-sale,en,
Soldes d'été,...,French,Summer Sale,summer-sale,fr,en

对于 WP All Import Pro 及类似工具,请准备两个电子表格:一个用于分类法(类别、标签、产品类别),另一个用于文章和产品。内置的 WooCommerce 导入工具只需一个电子表格,因为产品类别存在于产品行中。

可变产品的自定义 WooCommerce 属性

如果您有带自定义属性的可变产品,请在翻译的产品行中添加一个额外的列:_wpml_import_wc_local_attribute_labels。该值是 slug:translation 对的 JSON 对象。对于具有 Size 和 Color 属性的法语可变产品:

{"size":"Taille","color":"Couleur"}

别名是小写的属性名称,空格替换为破折号。

先导入分类法,再导入文章

当您有单独的分类法文件时,请务必先导入它。类别、标签和任何其他分类法需要先存在,然后文章和产品才能引用它们。接着导入文章、页面、产品和其他内容类型。

如果您将数据拆分为每种语言一个文件,请在运行 WPML 关联步骤之前导入所有语言文件。

在所有内容导入完毕后,您只需运行一次 WPML 导入。关联步骤会先处理分类法,然后再处理文章,并将每篇文章重新连接到其自身语言的术语 – 因此,在术语尚未关联时导入的文章,最终会附加到正确语言的术语上。

在导入插件中映射语言列

每个导入插件都有自己处理自定义列的方式。关键步骤是将三个 WPML 列映射到自定义字段(对于分类法,则是术语元数据)。在 WP All Import Pro 中,这在导入向导的第 3 步中进行:

  • 对于文章和产品。打开自定义字段(Custom Fields),添加三个字段,将语言列拖到值(Value)框中,并在名称(Name)框中使用不带括号的列名。
  • 对于分类法。打开术语元数据(Term Meta),添加三个术语元数据字段,并以相同的方式映射语言列。
在 WP All Import 向导的第 3 步中,三个 WPML 语言列被映射为自定义字段。
在 WP All Import 向导的第 3 步中,三个 WPML 语言列被映射为自定义字段。

如果未映射这些列,WPML 在您运行关联步骤时将无内容可读。

在导入和关联步骤之间您会看到什么

在您运行 WPML Export and Import 之前,导入的内容都位于默认语言下,并且 WPML 会自动将文章和产品保持在草稿状态,以防止前端出现混合语言内容。这是预期的中间状态,而不是导入失败的迹象。在关联步骤之后,内容将被发布 – 或设置为您在 _wpml_import_after_process_post_status 列中填写的任何状态。

导入后且在运行 WPML 导入之前:英语和法语文章都是英语下的草稿。
导入后且在运行 WPML 导入之前:英语和法语文章都是英语下的草稿。

对于不受支持的导入插件,您需要在关联步骤完成后手动发布文章。

运行 WPML 导入

导入插件完成后:

  1. 在 WordPress 管理后台中打开WPMLExport and Import。
  2. 单击运行 WPML 导入。
WPML Export and Import 会找到导入的内容并显示运行 WPML 导入按钮。
WPML Export and Import 会找到导入的内容并显示运行 WPML 导入按钮。
运行 WPML 导入会显示每个步骤及其处理的项目数。完成后会显示多语言导入完成(Multilingual Import Complete)。
运行 WPML 导入会显示每个步骤及其处理的项目数。完成后会显示多语言导入完成(Multilingual Import Complete)。

WPML 会读取每一行的语言列,为该行分配语言,并将翻译链接到其源内容。对于大型目录,这可能需要几分钟时间。完成后,您导入的内容将以正确的语言发布,并且每个翻译都连接到其源内容。

在后台和前端进行抽查:

  • 打开文章类型或产品列表 – 确认每一行都显示在正确的语言旗帜下。
  • 访问前端并切换语言 – 每个翻译页面都应加载其翻译版本,而不是回退到源内容。
在运行 WPML 导入之后:三篇英语文章和三篇法语文章,已发布并作为翻译连接。
在运行 WPML 导入之后:三篇英语文章和三篇法语文章,已发布并作为翻译连接。

如果分类法翻译未能成功链接,请在 WordPress 管理后台中打开该术语,并使用该术语的“语言”框将其连接到默认语言术语。

WPML 导入不涵盖的内容

WPML 导入会设置每个项目的语言并连接其翻译。它不会更改其他内容。导入后请检查以下内容:

  • 父页面、菜单和置顶文章。WPML 不会调整翻译页面的父级,不会将导入的项目添加到菜单中,也不会在语言之间复制置顶设置。
  • 内容中的链接和图像 ID。WPML 不会更改导入内容中的链接、图像 ID 或图像字段。请在翻译中对其进行编辑。
  • 复制的字段。WPML 导入会连接翻译,但它不会将价格或库存等字段从原文复制到翻译中。要在更新导入后复制它们,请打开原文并再次保存。
  • WooCommerce Bookings。可预订产品导入时不包含其人员类型(儿童、成人等)和资源。请在导入后将人员类型和资源添加到翻译的产品中。

自动化 – 无需单击即可运行 WPML 导入

对于夜间同步、供应商数据源、部署管道或任何计划的导入,WPML 关联步骤可以在没有管理 UI 的情况下运行。有三种方法可以进行关联:

POST 端点(适用于由 Cron 驱动的导入,如 WP All Import 计划操作)

这是推荐的方法。在 wp-config.php 中添加一个强密钥:

define( 'WPML_IMPORT_KEY', 'your-strong-secret-key-here' );

然后向您的计划导入设置中添加第二个命令。它会向您的网站发送 POST 请求,并在请求正文中传递密钥:

curl -X POST https://yoursite.com/ \
  -d 'wpml_import_trigger=your-strong-secret-key-here'

使用 wget 的相同调用:

wget -q -O - \
  --post-data='wpml_import_trigger=your-strong-secret-key-here' \
  https://yoursite.com/

对于 WP All Import Pro 的手动计划,请在导入命令之后立即添加这两个命令中的任意一个。

运行关联步骤时,您的网站将响应状态 200 和以下消息:

Import process completed

另外两个响应会告诉您发生了什么:401 表示密钥不匹配,204 表示没有剩余要处理的内容。

旧的 URL 端点 – 在 5.0.0 中已移除

在 WPML Export and Import 1.2.0 之前,您在 URL 中传递密钥:

https://yoursite.com/?wpml_import_trigger=your-strong-secret-key-here

从 WPML Export and Import 5.0.0 开始,此 URL 不再运行导入。在 URL 中携带密钥的请求将获得状态 405。请将您的计划导入移至上述 POST 调用。

原因在于密钥。URL 会经过服务器日志、浏览器历史记录和分析工具,而您的密钥也会随之传递。POST 请求将密钥保留在请求正文中。

动作钩子(适用于 PHP 计划导入)

如果您使用 Action Scheduler 或 wp_schedule_single_event 从 PHP 计划导入,请使用一个动作调用触发 WPML 步骤:

do_action( 'wpml_import_process' );

要在导入动作之后立即将其作为一次性后台任务运行:

wp_schedule_single_event( time(), 'wpml_import_process' );

如果导入未完成,请参阅调试 WPML。

WP-CLI

对于部署脚本、容器构建或任何无法使用管理 UI 的管道,请从 WP-CLI 运行关联步骤:

wp wpml import process

该命令会报告连接了多少个翻译。它是运行 WPML 导入按钮的直接替代方案。

自动翻译导入的内容

您可以让 WPML 自动翻译导入的内容。如果不这样做,您将以一种语言导入内容,然后(在启用自动翻译所有内容的情况下)选择所有导入的项目并自行发送翻译,对于大批量和重复导入来说,这会非常耗时。相反,请在您的文件中再添加一列:

  • _wpml_import_tea。在您想要自动翻译的源语言行上将其设置为 1。

当您运行 WPML 导入时,WPML 会为每个标记的文章创建自动翻译任务,将其翻译为您的网站中尚未有翻译的每种语言。您已导入翻译的行将保持不变。

这需要启用 WPML 的自动翻译所有内容模式 – 否则,该标记将被忽略。

常见陷阱

  • 导入文件缺少三个语言列。内容已导入,但作为未标记的源语言行存在;运行 WPML 导入没有要关联的内容。修复方法:将这些列添加到源数据中,重新导出并重新导入。
  • 跳过了 WP All Import 的自定义字段 / 术语元数据映射。与缺少列的情况类似。数据在文件中,但导入插件未将其存储在文章上。请在映射字段后重新运行导入。
  • 导入网站上未设置目标语言。未配置语言的导入行将归入默认语言。请先在WPML设置语言中添加缺少的语言,然后再重新运行。
  • 不受支持的导入插件。关联步骤后,导入的文章仍处于草稿状态。请手动发布它们,或切换到受支持的插件。
  • 自定义导入脚本未传递语言数据。修复方法在脚本级别。三个语言列(以及 WooCommerce 属性列,如果适用)需要到达该行。
  • 您自己的代码添加的内容未保持在草稿状态。WPML 仅针对受支持的导入插件将内容保持在草稿状态。您的代码使用 wp_insert_post 添加的内容,或从 PHP 或 WP-CLI 运行的 WooCommerce 导入,将保留代码赋予其的状态。请自行将新内容创建为草稿,并将 _wpml_import_after_process_post_status 设置为 publish。
  • wp export 丢弃了术语的语言列。WP-CLI 2.12.0 附带 export-command 2.1.14,它不写入术语元数据。在 wp import 之后,每个类别和标签都会丢失其语言列。请将 export-command 更新到 2.1.15 或更高版本,或者从 WordPress 管理后台的工具导出中导出。

如果导入一直遇到相同的问题,WPML 支持团队提供 24/7 全天候导入问题解答。

用例

将多语言内容移动到新网站

最常见的情况:从一个 WPML 网站导出内容,并将其(全部或部分)引入另一个网站。

  1. 在源网站上,在您的导出工具旁边安装 WPML Export and Import,并导出您想要移动的内容(请参阅导出)。语言列将自动随之导出。
  2. 在新网站上,完成导入配置 – 安装插件,并设置源网站中的每种语言。
  3. 使用您的导入工具先导入分类法,然后导入内容。
  4. 运行 WPML 导入。您的内容将以正确的语言显示,并且每个翻译都已连接,就像在源网站上一样。

重置 WPML 并将翻译重新导入到同一网站

将导出视为网站语言关联的安全副本:每一行的语言,以及哪些行属于同一个翻译组。您可以自动保持该副本为最新状态 – 例如,在您的导出工具中安排夜间导出,并将其保存到其自己的文件中。如果 WPML 的语言数据出现异常状态,您可以重置 WPML,并按照以下步骤重新导入在数据仍然良好时获取的最新导出文件。有一件事是它无法做到的:修复在问题发生后进行的导出 – 该文件保留的是导出时数据的任何状态。

  1. 在语言数据完好时导出 – 或获取您最新的计划导出文件。导出您关心的每种内容类型及其翻译(请参阅导出)。三个语言列捕获了您需要恢复的内容:每一行的语言以及哪些行作为彼此的翻译属于同一组。
  2. 重置 WPML。请参阅重置 WPML。重置会删除所有 WPML 数据(语言、每个项目的语言、翻译之间的链接、字符串翻译和翻译任务),并停用 WPML。您的文章、页面、产品和分类法会保留。再次激活 WPML。
  3. 重新设置语言 – 与重置前网站相同的默认语言和次要语言。
  4. 重新导入同一文件,更新现有内容。这是与新网站迁移不同的步骤:文章已经存在,因此导入必须更新它们,而不是创建新文章。使用 WP All Import 的记录匹配(按 ID 匹配),或 WooCommerce 导入器的更新现有产品选项。标准 WordPress 导入器无法做到这一点 – 它只创建新内容,因此会重复每一行。
  5. 运行 WPML 导入。文件中的语言分配和翻译组将重新关联到现有内容上。

只有每个项目的语言和翻译之间的链接会恢复。字符串翻译、翻译任务和 WPML 设置不在导出文件中。请在导入后重新设置它们。

稍后添加语言

您导入了英语和西班牙语的目录,现在您要添加法语。准备一个仅包含法语行的文件。为每一行分配其原文的翻译组、语言代码 fr 以及源语言 en。导入该文件并单击运行 WPML 导入。WPML 会保留它连接的每个项目的组,因此每个法语行都会加入其原文的翻译中。

每晚同步供应商数据源

您的供应商每晚发送产品数据源。原始产品是英语的,数据源包含三个语言列。在 WP All Import Pro 中安排导入,并在其后立即添加 POST 调用。在具有新产品的行上将 _wpml_import_tea 设置为 1。每天晚上,新产品都会获取其语言,并且 WPML 会将它们发送以自动翻译成您的其他语言。

作者:Amir

作者:Amir