WooCommerce: как массово удалить варианты товаров без продаж

Проблема: накопление неиспользуемых вариантов товаров в WooCommerce

Нередко в интернет-магазинах на WooCommerce с течением времени накапливаются вариации товаров, которые не продаются и не нужны. Они занимают место в базе данных, замедляют работу сайта и усложняют администрирование. Задача — быстро и безопасно массово удалить все варианты товаров, которые не имеют продаж (то есть по которым не было заказов), чтобы очистить магазин и улучшить производительность.

Диагностика: как определить варианты без продаж

Для начала нужно понять, какие именно варианты товаров не проданы. В WooCommerce продажи связаны с таблицей wp_woocommerce_order_items и метаданными заказа. Варианты товаров — это дочерние продукты типа variation в таблице wp_posts. Связать их с заказами можно по order_item_id и product_id.

Для быстрой диагностики можно использовать SQL-запрос, чтобы получить ID вариантов без продаж:

SELECT p.ID FROM wp_posts p
LEFT JOIN wp_woocommerce_order_itemmeta oim ON p.ID = oim.meta_value AND oim.meta_key = '_variation_id'
LEFT JOIN wp_woocommerce_order_items oi ON oi.order_item_id = oim.order_item_id
WHERE p.post_type = 'product_variation' AND oi.order_item_id IS NULL;

Этот запрос выбирает все вариации товаров, по которым нет записей в таблице заказов — то есть без продаж.

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

1. Резервное копирование

Перед выполнением любых операций с базой данных сделайте полное резервное копирование сайта и базы данных.

2. Создание WP-CLI скрипта для удаления вариантов

Самый безопасный и удобный способ — использовать WP-CLI для выборочного удаления. Вот пример команды на PHP, которую можно выполнить через WP-CLI или добавить временно в файл темы:

function delete_unsold_variations() {
    global $wpdb;
    // Получаем ID вариаций без продаж
    $variations = $wpdb->get_col("SELECT p.ID FROM {$wpdb->posts} p
        LEFT JOIN {$wpdb->prefix}woocommerce_order_itemmeta oim ON p.ID = oim.meta_value AND oim.meta_key = '_variation_id'
        LEFT JOIN {$wpdb->prefix}woocommerce_order_items oi ON oi.order_item_id = oim.order_item_id
        WHERE p.post_type = 'product_variation' AND oi.order_item_id IS NULL");

    if (empty($variations)) {
        echo "Нет вариаций без продаж для удаления.\n";
        return;
    }

    foreach ($variations as $var_id) {
        wp_delete_post($var_id, true); // принудительное удаление без перемещения в корзину
        echo "Удалена вариация ID: $var_id\n";
    }
    echo "Удалено " . count($variations) . " вариаций без продаж.\n";
}

Запустите функцию через WP-CLI с помощью:

wp eval 'delete_unsold_variations();'

3. Очистка кэша и обновление метаданных

После удаления рекомендуется очистить кэш сайта и WooCommerce, а также проверить целостность метаданных:

wp cache flush
wp transient delete --all

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

  • В админке WooCommerce и в разделе «Вариации» проверьте, что не осталось товаров без продаж.
  • Запустите SQL-запрос из раздела диагностики повторно — он должен вернуть пустой результат.
  • Проверьте работу фронтенда, чтобы убедиться, что удалённые вариации не отображаются.

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

  • Ошибка: удаление не всех вариаций.
    Причина: кеширование или неполный запрос.
    Решение: очистите кеш, проверьте префиксы таблиц, убедитесь, что используется правильная база данных.
  • Ошибка: удаление вариаций с продажами.
    Причина: неправильное сопоставление по _variation_id или ошибки в запросе.
    Решение: внимательно проверьте SQL, протестируйте на выборке.
  • Ошибка: слишком долгое выполнение удаления при большом количестве вариаций.
    Решение: разбейте удаление на партии (batch), используйте WP-CLI с параметром --skip-plugins.

Таблица сравнения способов удаления вариантов без продаж

МетодОписаниеПлюсыМинусы
SQL-запрос напрямуюУдаление через SQL DELETEБыстроРиск повредить данные, нет очистки метаданных
WP-CLI с PHP скриптомУдаление через wp_delete_post()Безопасно, удаляет всю связанную информациюМедленнее, требует доступа к серверу
Плагины очисткиИспользование плагинов типа Clearfy ProУдобно, без кодаМогут не иметь нужной фильтрации

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

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

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
WooCommerce: как массово удалить варианты товаров без продаж
31.05.2026
WooCommerce: как использовать хуки для добавления пользовательских полей в корзину
22.04.2026
Lazy Load для видео в WordPress: как ускорить загрузку страниц и улучшить производительность
10.03.2026
Как автоматически удалять спам комментарии в WordPress: практические решения
04.01.2026
WooCommerce: как добавить поле срока годности в корзину и оформить заказ
24.06.2026
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше