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

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

Почему появляются дубликаты записей в WordPress

Дублированные записи могут появляться из-за:

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

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

Как обнаружить дубликаты записей в базе данных WordPress

Самый надежный способ — поиск по базе данных. Обычно дубликатами считаются записи с одинаковым заголовком (post_title) и/или содержимым (post_content).

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

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

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

Для более точной проверки можно использовать дополнительные поля, например, post_date или post_author.

Удаление дубликатов через код: пример функции для WPLite

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

function wplite_delete_duplicate_posts() {
    global $wpdb;
    // Находим дубли по заголовку
    $duplicates = $wpdb->get_results(
        "SELECT post_title, MIN(ID) as keep_id FROM {$wpdb->posts} WHERE post_type = 'post' AND post_status = 'publish' GROUP BY post_title HAVING COUNT(*) > 1"
    );

    foreach ($duplicates as $dup) {
        // Удаляем все записи с этим заголовком кроме той, что с минимальным ID
        $wpdb->query($wpdb->prepare(
            "DELETE FROM {$wpdb->posts} WHERE post_title = %s AND ID != %d",
            $dup->post_title,
            $dup->keep_id
        ));
    }
    echo 'Дубликаты удалены.';
}

Эту функцию можно вызвать из административной части или через WP-CLI. Важно делать резервную копию базы перед удалением.

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

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

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

Использование плагинов значительно упрощает процедуру и минимизирует риск ошибок.

Автоматизация удаления дубликатов с помощью WP-CLI

Для опытных администраторов и разработчиков удобен способ удаления через WP-CLI. Пример команды, которая выведет дубли по заголовку:

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

Далее можно написать скрипт на PHP с использованием WP-CLI для удаления дубликатов, например:

function wplite_cli_delete_duplicates() {
    $posts = get_posts([
        'post_type' => 'post',
        'posts_per_page' => -1,
        'post_status' => 'publish',
    ]);
    $titles = [];
    foreach ($posts as $post) {
        if (isset($titles[$post->post_title])) {
            wp_delete_post($post->ID, true);
        } else {
            $titles[$post->post_title] = true;
        }
    }
    WP_CLI::success('Дубликаты удалены через WP-CLI.');
}

Эту функцию можно подключить как кастомную команду WP-CLI.

Советы для предотвращения появления дубликатов

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

  • Перед импортом данных использовать проверку на уникальность;
  • Использовать плагины с хорошей репутацией и проверять логи ошибок;
  • При написании своих скриптов добавлять проверки на существование записей с таким же заголовком или уникальным полем;
  • Регулярно делать аудит базы данных с помощью плагинов типа Clearfy Pro или WP-Optimize.

Профилактика значительно сэкономит время и ресурсы.

Решение проблемы неработающей отправки формы оформления заказа в WooCommerce
06.06.2026
Как использовать AJAX в WordPress для динамического обновления контента
10.12.2025
Как удалить неиспользуемые атрибуты продуктов WooCommerce через код
02.05.2026
Как решить проблему неработающих скриптов в WordPress
16.02.2026
Как настроить удалённый вход в WordPress с помощью OTP (одноразовых паролей)
14.03.2026