Как удалить автоматические повторяющиеся посты в WordPress

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

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

Дублирование контента может возникать по нескольким причинам:

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

Выявить дубли можно по совпадению заголовков, URL, содержимого или метаданных.

Как найти дублирующиеся записи: SQL-запросы и WP_Query

Для начала важно определить, какие записи повторяются. Один из способов — использовать SQL-запрос к базе данных WordPress, чтобы выявить одинаковые заголовки или URL.

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

SELECT post_title, COUNT(*) c FROM wp_posts
WHERE post_type = 'post' AND post_status = 'publish'
GROUP BY post_title HAVING c > 1;

Этот запрос покажет все заголовки, которые встречаются более одного раза среди опубликованных постов.

Поиск дубликатов через WP_Query с PHP

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

function wpcodex_find_duplicate_posts() {
    global $wpdb;
    $query = "SELECT post_title, GROUP_CONCAT(ID) as ids, COUNT(*) as count
              FROM {$wpdb->posts}
              WHERE post_type = 'post' AND post_status = 'publish'
              GROUP BY post_title
              HAVING count > 1";
    return $wpdb->get_results($query);
}

$duplicates = wpcodex_find_duplicate_posts();
foreach ($duplicates as $dup) {
    echo 'Дублирующийся заголовок: ' . esc_html($dup->post_title) . ' (ID: ' . $dup->ids . ')<br>';
}

Этот код выводит заголовки и ID повторяющихся постов.

Удаление дублирующихся постов вручную и автоматизировано

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

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

Ниже пример функции wpcodex_delete_duplicate_posts(), которая оставляет только одну запись с уникальным заголовком и удаляет остальные:

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

    foreach ($duplicates as $dup) {
        $ids = explode(',', $dup->ids);
        // Оставляем первый ID, остальные удаляем
        $ids_to_delete = array_slice($ids, 1);

        foreach ($ids_to_delete as $id) {
            wp_delete_post($id, true); // true - безвозвратно
            echo 'Удален пост ID: ' . esc_html($id) . '<br>';
        }
    }
}

// Запуск функции
wpcodex_delete_duplicate_posts();

Перед запуском функции обязательно сделайте резервную копию базы данных. Можно запускать этот код в файле плагина или через WP-CLI.

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

Если вы предпочитаете готовые решения, обратите внимание на плагины:

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

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

Профилактика появления дублирующихся постов

Чтобы не сталкиваться с повторяющимися записями в будущем, рекомендуем:

  • Настроить уникальность заголовков и URL при импорте данных;
  • Использовать функции проверки наличия поста перед созданием нового (например, с помощью WP_Query или SQL);
  • Регулярно очищать базу и мониторить появление дублей;
  • Контролировать работу плагинов автопубликации и импортёров;
  • Внедрять кастомные проверки в коде темы или плагинов с префиксом wpcodex_, чтобы избежать повторной публикации.

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

function wpcodex_check_post_exists_by_title($title) {
    $args = [
        'post_type' => 'post',
        'post_status' => 'publish',
        'title' => $title,
        'fields' => 'ids',
        'posts_per_page' => 1
    ];
    $query = new WP_Query($args);
    return !empty($query->posts);
}

// Использование
if (!wpcodex_check_post_exists_by_title('Заголовок')) {
    // Создаем пост
}

Эта проверка поможет предотвратить создание дублей по названию.

Как добавить автоматический режим работы плагинов WordPress
28.01.2026
Как создать автоматический импорт записей из ВКонтакте в WordPress
12.04.2026
WooCommerce: как автоматически обновлять статус заказа после успешной оплаты
03.06.2026
Как добавить собственные типы табличных данных в WordPress
09.04.2026
Автоматическое отменение неоплаченных заказов в WooCommerce
03.05.2026