WPML

В WPML 3.9 появилась возможность отображать контент на языке оригинала при просмотре страниц на других языках. Если до версии 3.9 Ваш сайт использовал дублирование контента, Вам может потребоваться удалить весь дублированный контент с Вашего сайта перед использованием этого нового режима перевода.

Как использовать это руководство

Шаги, описанные на этой странице, удаляют настройки и контент из базы данных. Продолжайте только в том случае, если Вы знаете, что делаете, и обязательно начните с создания полной резервной копии базы данных Вашего сайта.

Чтобы использовать предоставленные SQL-запросы, Вам необходимо их отредактировать:
  • Замените XXXX на тип записи, для которого Вы хотите удалить дублированный контент (например, «post», «product» или «page»).
  • Замените YYYY на код языка по умолчанию Вашего сайта (например, «en»).
  • Замените wp_ на префикс таблиц, настроенный с помощью переменной $table_prefix в файле wp-config.php (по умолчанию 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 · Последнее обновление: 23 мая 2022