Как удалить дубликаты постов в WordPress без плагинов

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

Причины появления дубликатов постов и последствия

Чаще всего дубликаты появляются при массовом импорте контента, когда один и тот же пост по ошибке импортируется дважды. Также частая причина — ручное копирование постов без удаления оригинала. Иногда их создают плагины бэкапа или миграции, неправильно обрабатывающие запись.

Последствия дубликатов:

  • Снижение позиций сайта в поисковых системах из-за дублей контента;
  • Увеличение размера базы данных и замедление запросов;
  • Запутанность в админке и неудобство управления контентом.

Поэтому важно регулярно проверять и удалять дубликаты.

Поиск дубликатов постов с помощью SQL-запроса

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

Пример запроса для поиска дублирующих заголовков среди опубликованных постов:

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

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

SELECT ID, post_title, post_date
FROM wp_posts
WHERE post_title = 'Заголовок поста' AND post_type = 'post' AND post_status IN ('publish', 'draft');

Обратите внимание, что wp_posts — это стандартное имя таблицы, но префикс wp_ может отличаться в вашей базе.

Удаление дубликатов постов с помощью PHP-кода

Можно написать скрипт, который с помощью WP_Query и функционала WordPress найдет дубликаты и удалит их, оставив только один пост с уникальным заголовком.

Пример функции wpcheckerRemoveDuplicatePosts:

function wpcheckerRemoveDuplicatePosts() {
    global $wpdb;
    $results = $wpdb->get_results(
        "SELECT post_title, GROUP_CONCAT(ID ORDER BY ID) AS ids, COUNT(*) AS cnt
         FROM {$wpdb->posts}
         WHERE post_type = 'post' AND post_status IN ('publish', 'draft')
         GROUP BY post_title
         HAVING cnt > 1"
    );

    foreach ($results as $row) {
        $ids = explode(',', $row->ids);
        // Оставляем первый ID, остальные удаляем
        array_shift($ids);
        foreach ($ids as $id) {
            wp_delete_post($id, true); // true — без возможности восстановления
        }
    }
}

Чтобы запустить этот код, добавьте его во временный плагин или используйте WP CLI. Важно сначала сделать резервную копию базы данных.

Использование WP CLI для удаления дубликатов

Если у вас есть доступ к командной строке, можно автоматизировать процесс через WP CLI. К сожалению, штатных команд для удаления дубликатов нет, но можно написать кастомную команду. Вот пример простого скрипта для WP CLI:

wp eval '
$posts = wpdb->get_results(
  "SELECT post_title, GROUP_CONCAT(ID ORDER BY ID) AS ids, COUNT(*) AS cnt
   FROM {$wpdb->posts}
   WHERE post_type = "post" AND post_status IN ("publish", "draft")
   GROUP BY post_title
   HAVING cnt > 1"
);
foreach ($posts as $post) {
  $ids = explode(",", $post->ids);
  array_shift($ids); // оставляем первый
  foreach ($ids as $id) {
    wp_delete_post($id, true);
  }
}
'

Эта команда удалит все дубликаты постов, оставив по одному с каждым уникальным заголовком.

Особенности и рекомендации при удалении дубликатов

При удалении дубликатов важно учитывать следующие моменты:

  • Связанные данные: комментарии, метаданные и таксономии дубликатов будут удалены вместе с постами.
  • Выбор поста для сохранения: в примерах оставляется пост с наименьшим ID. При необходимости можно изменить логику, например, оставить последний по дате.
  • Резервное копирование: перед удалением обязательно сделайте полную резервную копию базы данных.
  • Проверка результатов: после удаления проверьте сайт на наличие ошибок и корректность отображения контента.

Полезные плагины для контроля дубликатов (опционально)

Хотя задача стояла без плагинов, для контроля и предотвращения появления дубликатов можно использовать плагины:

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

Выводы

Удаление дубликатов постов в WordPress без использования плагинов — задача вполне решаемая с помощью SQL и PHP. Главное — аккуратность, резервное копирование и тестирование. Следите за целостностью контента и периодически проверяйте сайт на наличие дублирующих записей, чтобы поддерживать высокое качество и скорость работы ресурса.

WooCommerce: не отправляется письмо подтверждения заказа — как исправить
01.05.2026
Как удалить и заблокировать жёсткие и soft спам комментарии в WordPress
13.02.2026
Как отладить проблемы с выводом картинок в WordPress
27.01.2026
WooCommerce: как автоматически удалить товар после продажи
27.06.2026
Оптимизация базы данных WordPress: практические советы и примеры кода
21.11.2025