WPML

WPML 3.9 引入了一项功能,允许在查看其他语言的页面时显示来自原始语言的内容。如果您的站点在 3.9 版本之前依赖于内容复制,您可能希望在使用这种新的翻译模式之前从站点中删除所有重复内容。

如何使用本教程

本页提供的步骤会从数据库中删除设置和内容。请仅在您清楚操作后果的情况下继续,并且务必首先为您的站点数据库创建完整备份

要使用提供的 SQL 查询,您必须对其进行编辑:
  • XXXX 替换为您希望删除重复内容的文章类型(例如“post”、“product”或“page”)。
  • YYYY 替换为站点的默认语言代码(例如“en”)。
  • wp_ 替换为在 wp-config.php 文件中使用 $table_prefix 变量配置的表前缀(默认为 wp_)。

最后,您需要使用处理 SQL 数据库的工具(例如 phpMyAdmin)来运行这些查询。

1. 删除重复内容

从 wp_posts 中删除重复内容
DELETE FROM wp_posts
WHERE post_type = 'XXXX' AND ID IN (
  SELECT pm.post_id
  FROM wp_postmeta pm
    JOIN wp_icl_translations t ON t.element_id = pm.meta_value
  WHERE pm.meta_key = '_icl_lang_duplicate_of' AND pm.meta_value > 0 AND
    t.element_type LIKE 'post_%' AND t.language_code = 'YYYY'
)

2. 删除翻译设置

从 wp_icl_translations 中删除翻译设置
DELETE FROM wp_icl_translations
WHERE element_type = 'post_XXXX' AND element_id IN (
  SELECT pm.post_id
  FROM wp_postmeta pm
    JOIN wp_icl_translations t ON t.element_id = pm.meta_value
  WHERE meta_key = '_icl_lang_duplicate_of' AND meta_value > 0 AND t.language_code = 'YYYY'
)

3. 删除孤立的文章元数据


请注意,此查询的执行速度较慢,并且可能会超时,具体取决于您的服务器设置。此外,运行此查询并非强制要求,因为它仅用于清除数据库中的孤立文章元数据。
从 wp_postmeta 中删除孤立数据
DELETE pm
FROM wp_postmeta pm
  LEFT JOIN wp_posts wp ON wp.ID = pm.post_id
WHERE wp.ID IS NULL

作者:Amir · 最后更新时间:2022年5月23日