Как удалить дубликаты продуктов WooCommerce с помощью кода

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

Дубликаты продуктов в WooCommerce чаще всего появляются из-за ошибок при импорте, дублировании записей или конфликтов плагинов. Это приводит к путанице в каталоге, ухудшению пользовательского опыта и SEO-проблемам. Чтобы проверить наличие дубликатов, можно использовать SQL-запросы или плагины для анализа базы данных.

Проверка дубликатов через базу данных

Выполните следующий SQL-запрос через phpMyAdmin или аналогичный инструмент, чтобы найти продукты с одинаковым названием и статусом 'publish':

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

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

Пошаговое решение: удаление дубликатов программно

Для удаления дубликатов продуктов можно написать PHP-скрипт, который оставит только один продукт с уникальным названием, а остальные удалит. Важно сделать резервную копию базы перед запуском.

Код для удаления дубликатов продуктов WooCommerce

function delete_woocommerce_duplicate_products() {
    global $wpdb;

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

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

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

        foreach ($product_ids as $id) {
            wp_delete_post($id, true); // Удаляем навсегда
        }
    }
}

// Запускаем функцию один раз, например, через админский хук
add_action('admin_init', function() {
    if (current_user_can('manage_options') && isset($_GET['delete_wc_duplicates']) && $_GET['delete_wc_duplicates'] == '1') {
        delete_woocommerce_duplicate_products();
        wp_die('Дубликаты продуктов удалены.');
    }
});

Чтобы запустить удаление, перейдите в админку по URL https://ваш-сайт/wp-admin/?delete_wc_duplicates=1. После выполнения скрипта появится сообщение об удалении.

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

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

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

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

  • Нет доступа к admin_init: Убедитесь, что вы вошли под пользователем с правами администратора.
  • Ошибка при удалении: Проверьте, не блокируют ли плагины или темы удаление постов. Попробуйте временно отключить сторонние плагины.
  • Дубликаты не удалились полностью: Возможно, дубликаты отличаются пробелами или регистром в названии. В этом случае усложните SQL-запрос с функциями TRIM() и COLLATE:
SELECT TRIM(LOWER(post_title)) AS title_clean, COUNT(*) as count
FROM wp_posts
WHERE post_type = 'product' AND post_status = 'publish'
GROUP BY title_clean
HAVING count > 1;

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

  • Всегда создавайте резервную копию базы данных перед массовым удалением контента.
  • Запускайте удаление дубликатов в период низкой нагрузки сайта.
  • Для больших магазинов используйте постраничную обработку, чтобы избежать превышения лимита памяти.
  • После удаления дубликатов выполните оптимизацию таблиц базы данных через phpMyAdmin или WP-CLI (wp db optimize).
  • Если часто импортируете данные, внедрите проверку на дубликаты на этапе импорта, чтобы избежать повторений.

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

МетодПреимуществаНедостатки
Плагин (например, WP Sweep)Простота использования, интерфейсМожет не найти все дубликаты, ограниченная гибкость
SQL-запросы вручнуюБыстрая диагностика, точечное удалениеТребует навыков, риск ошибок без бэкапа
Код на PHP (как в статье)Автоматизация, возможность кастомизацииНеобходима базовая разработка, риск ошибок
Как удалить старые и неиспользуемые мета-поля в WordPress
09.04.2026
Как отключить WooCommerce Cart Fragments для ускорения сайта
06.05.2026
Как использовать REST API в WordPress для создания кастомных приложений
22.11.2025
Как удалить старые версии плагинов WordPress
08.11.2025
Как настроить удалённый вход в WordPress с помощью OTP (одноразовых паролей)
14.03.2026