Как удалить дубли продуктов в WooCommerce через код

Диагностика проблемы дублей продуктов в WooCommerce

Дублирование продуктов в WooCommerce может возникать по разным причинам: импорт товаров, ошибки плагинов, сбои при обновлениях или неправильные настройки. Чтобы подтвердить наличие дублей, выполните SQL-запрос к базе данных или используйте WP-CLI:

wp db query "SELECT post_title, COUNT(*) as count FROM wp_posts WHERE post_type = 'product' AND post_status != 'trash' GROUP BY post_title HAVING count > 1;"

Этот запрос покажет названия продуктов и количество их дублей. Если есть записи с count > 1, значит дубли действительно существуют.

Пошаговое решение удаления дублей продуктов через код

1. Создание резервной копии базы

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

2. Определение критериев дубликата

Для удаления дублей нужно определить, по каким полям считать продукт дубликатом. Обычно это post_title и post_type = 'product'. Можно дополнительно учитывать метаданные.

3. Код для удаления дублей

Ниже пример функции для удаления дублей, оставляя только один экземпляр с минимальным ID:

function wpone_remove_woocommerce_duplicate_products() {
    global $wpdb;

    // Получаем названия продуктов, у которых есть дубли
    $duplicate_titles = $wpdb->get_col(
        "SELECT post_title FROM {$wpdb->posts} WHERE post_type = 'product' AND post_status != 'trash' GROUP BY post_title HAVING COUNT(*) > 1"
    );

    foreach ( $duplicate_titles as $title ) {
        // Получаем все ID продуктов с этим названием
        $product_ids = $wpdb->get_col($wpdb->prepare(
            "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'product' AND post_title = %s AND post_status != 'trash' ORDER BY ID ASC",
            $title
        ));

        // Оставляем первый (самый старый) продукт, остальные удаляем
        array_shift($product_ids); // первый ID удаляем из массива

        foreach ( $product_ids as $dup_id ) {
            wp_delete_post($dup_id, true); // true = безвозвратно
        }
    }
}

// Запускаем функцию один раз
wpone_remove_woocommerce_duplicate_products();

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

Проверка результата после удаления дублей

Повторите SQL-запрос из раздела диагностики. Если он вернул пустой результат, значит дубли удалены.

wp db query "SELECT post_title, COUNT(*) as count FROM wp_posts WHERE post_type = 'product' AND post_status != 'trash' GROUP BY post_title HAVING count > 1;"

Также проверьте фронтенд и админку WooCommerce: убедитесь, что отображаются только уникальные товары.

Частые ошибки и их исправление

  • Удаление нужных продуктов. Если критерии дубликата слишком общие, могут удалиться уникальные товары с одинаковым названием. Решение: добавьте дополнительные проверки, например, по метаданным SKU.
  • Функция запускается несколько раз. Это приведет к ошибкам или попыткам удалить уже удаленные записи. Решение: запускать функцию один раз и удалять код.
  • Отсутствие резервной копии. Если удаление прошло неудачно, восстановить данные будет сложно.

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

  • Перед удалением дублей всегда делайте резервную копию базы.
  • Если у вас большое количество товаров, выполняйте удаление пакетами, чтобы избежать перегрузки сервера.
  • Используйте WP-CLI для массовых операций — это быстрее и безопаснее.
  • Для предотвращения дублей в будущем используйте уникальные мета-поля, например SKU, и добавляйте валидацию при добавлении товаров.

Сравнение методов удаления дублей WooCommerce

МетодПлюсыМинусы
Ручное удаление через админкуПростота, контрольМедленно, риск пропуска дублей
SQL-запросыБыстро, эффективное удалениеРиск ошибок без бэкапа, требует знаний SQL
PHP-скрипт (как в статье)Автоматизация, гибкостьНужно тестировать, запускать один раз
Плагины для очистки дубликатовУдобство, интерфейсМогут быть платными, нагрузка на сайт
Как использовать REST API для управления пользователями в WordPress
16.04.2026
Как создать многоуровневое меню в WordPress с подменю
01.03.2026
Как удалить дубли продуктов в WooCommerce через код
07.05.2026
Как использовать AJAX в формах WordPress без плагинов
29.01.2026
Как добавить автоматическое сохранение записей в WordPress
13.12.2025