Как удалить дубли постов в WordPress: практическое руководство

Дублирование записей в WordPress может появиться по разным причинам: ошибки импорта, сбои в плагинах, ручное дублирование или проблемы при миграции сайта. Такие дубли негативно влияют на SEO, увеличивают размер базы данных и затрудняют администрирование сайта. В этой статье разберем, как выявить и удалить дубли постов в WordPress с помощью SQL-запросов, плагинов и собственного кода.

Почему появляются дубли постов в WordPress

Дубли могут возникать из-за:

  • Импорта контента с ошибками, когда записи копируются несколько раз;
  • Некорректной работы плагинов для миграции или резервного копирования;
  • Случайного дублирования через админ-панель;
  • Ошибок в пользовательском коде, создающем записи программно.

Понимание причины поможет предотвратить появление дублей в будущем.

Поиск дублей постов в базе данных

Чтобы найти дубли, можно использовать SQL-запросы. Обычно дубликаты определяются по совпадению заголовков (post_title) и типа записи (post_type).

Пример SQL-запроса для поиска дублей по заголовку

SELECT post_title, COUNT(*) as count
FROM wp_posts
WHERE post_type = 'post' AND post_status IN ('publish', 'draft')
GROUP BY post_title
HAVING count > 1
ORDER BY count DESC;

Этот запрос покажет заголовки, которые встречаются более одного раза. Можно адаптировать под page или кастомные типы записей.

Как получить ID дублированных постов

Для удаления нужно получить ID всех дублей, кроме одного оригинала. Например, так:

SELECT MIN(ID) as original_id, GROUP_CONCAT(ID) as duplicate_ids
FROM wp_posts
WHERE post_type = 'post' AND post_status IN ('publish', 'draft')
GROUP BY post_title
HAVING COUNT(*) > 1;

В этом примере MIN(ID) — оригинал, а остальные — дубли.

Удаление дублей с помощью плагинов

Если не хотите работать напрямую с базой, можно использовать плагины:

  • Remove Duplicate Posts — простой плагин для поиска и удаления дублей. Позволяет удалять по заголовкам, контенту или другим параметрам.
  • Duplicate Post Remover — более гибкий, с функцией предпросмотра дублей и выборочным удалением.

После установки и активации плагина зайдите в его настройки, выполните сканирование и удалите дубли. Обязательно сделайте резервную копию базы перед удалением.

Удаление дублей программно: пример кода для wpapp.ru

Если нужен кастомный подход, можно написать функцию, которая удаляет дубли по заголовку, оставляя только самую старую запись. Пример функции wpappRemoveDuplicatePosts():

function wpappRemoveDuplicatePosts() {
    global $wpdb;

    // Находим дубли по заголовку
    $duplicates = $wpdb->get_results(
        "SELECT post_title, GROUP_CONCAT(ID ORDER BY post_date ASC) as ids, COUNT(*) as count
         FROM {$wpdb->posts}
         WHERE post_type = 'post' AND post_status IN ('publish', 'draft')
         GROUP BY post_title
         HAVING count > 1"
    );

    foreach ($duplicates as $dup) {
        $ids = explode(',', $dup->ids);
        // Оставляем первый ID (самый старый)
        $original_id = array_shift($ids);

        foreach ($ids as $delete_id) {
            wp_delete_post($delete_id, true); // true - удалять безвозвратно
        }
    }
}

// Запуск функции (рекомендуется выполнять через WP-CLI или при необходимости)
wpappRemoveDuplicatePosts();

Этот код можно добавить в файл functions.php темы или создать отдельный плагин. Важно запускать функцию однократно, чтобы избежать лишних удалений.

Дополнительные советы по работе с дублированными постами

Чтобы избежать появления дублей в будущем:

  • Используйте уникальные идентификаторы при импорте данных.
  • Проверяйте работу плагинов, особенно для импорта и миграции.
  • Внедрите контроль при программном создании записей — проверяйте, есть ли уже запись с таким заголовком.
  • Рассмотрите использование плагина Clearfy Pro для оптимизации и чистки сайта — в нем есть функции для работы с дублирующимся контентом и оптимизацией базы.

Выводы и рекомендации

Удаление дублированных постов — важная задача для поддержания чистоты базы и SEO-показателей сайта. Используйте сочетание SQL-запросов для поиска, проверенных плагинов для удаления и кастомного кода для автоматизации процесса. Не забывайте делать резервные копии и работать аккуратно.

Наш каталог плагинов WordPress