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

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

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

Как определить неиспользуемые варианты?

Неиспользуемые варианты — это товары с типом product_variation, у которых нет продаж (отсутствуют записи в таблице заказов) и которые не отображаются в каталоге (статус «черновик» или «приватный»), либо имеют нулевой остаток и неактивны.

Пошаговое решение: удаление неиспользуемых вариантов через WP-CLI и PHP

1. Подготовка: резервное копирование базы данных

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

2. Поиск неиспользуемых вариантов

Пример запроса для поиска вариантов без продаж:

SELECT p.ID FROM wp_posts p
LEFT JOIN wp_woocommerce_order_items oi ON oi.order_item_name = p.post_title
WHERE p.post_type = 'product_variation' AND oi.order_item_id IS NULL;

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

3. Скрипт для удаления неиспользуемых вариантов

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

function wc_delete_unused_variations() {
    $args = [
        'post_type'      => 'product_variation',
        'posts_per_page' => -1,
        'post_status'    => ['publish', 'private', 'draft'],
    ];

    $variations = get_posts($args);
    $deleted = 0;

    foreach ($variations as $variation) {
        $sales_count = wc_get_product($variation->ID)->get_total_sales();
        $stock = wc_get_product($variation->ID)->get_stock_quantity();

        // Условие: нет продаж и нет остатка
        if ($sales_count == 0 && ($stock === null || $stock <= 0)) {
            wp_delete_post($variation->ID, true); // принудительное удаление
            $deleted++;
        }
    }

    return $deleted;
}

4. Запуск и проверка результата

Вызовите функцию через do_action или временно вставьте вызов в нужное место. Например, для однократного запуска через админку:

add_action('admin_init', function() {
    if (current_user_can('manage_woocommerce') && isset($_GET['delete_unused_variations'])) {
        $count = wc_delete_unused_variations();
        echo "Удалено вариантов: $count";
        exit;
    }
});

Перейдите в админку по адресу https://ваш_сайт/wp-admin/?delete_unused_variations=1. После выполнения вы увидите количество удалённых вариантов.

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

  • Проверьте базу данных через phpMyAdmin или WP-CLI: количество записей product_variation уменьшилось.
  • В админке WooCommerce проверьте список товаров: отсутствуют неиспользуемые варианты.
  • Проверьте работоспособность каталога и заказов, чтобы убедиться, что удалены только неиспользуемые варианты.

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

  • Удаление активных вариантов с остатком или продажами: Проверьте логику условий в коде, используйте get_total_sales() и get_stock_quantity() корректно.
  • Отсутствие резервной копии: всегда делайте бэкап перед массовыми удалениями.
  • Неправильный статус варианта: учитывайте, что варианты могут иметь статусы не только «publish», но и «private» или «draft».
  • Ошибки прав доступа: запускать удаление должен пользователь с правами администратора или менеджера WooCommerce.

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

  • Для больших магазинов используйте WP-CLI с аналогичной логикой, чтобы избежать таймаутов и перегрузки сервера.
  • Разбейте удаление на порции (например, по 100 вариантов за раз) — это уменьшит нагрузку.
  • Добавьте логирование удалённых ID в файл для последующего аудита.
  • Ограничьте запуск функции через URL только авторизованными администраторами.

Сравнение способов удаления неиспользуемых вариантов

МетодПлюсыМинусы
Ручное удаление через админку WooCommerceПросто, визуальноМедленно, неэффективно для больших магазинов
Использование плагинов (например, WP Bulk Delete)Автоматизация, удобный интерфейсДополнительная нагрузка, зависимость от стороннего кода
Код на PHP + WP-CLIГибкость, полный контроль, без лишних плагиновТребует навыков, риск ошибок без резервного копирования

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

⭐⭐⭐⭐⭐
WooCommerce: как массово удалить неиспользуемые варианты товаров без плагинов
20.07.2026
WooCommerce: как успешно обращаться к базовым данным при массовом обновлении заказов
16.06.2026
Как создать автоматический импорт постов в WordPress из RSS канала
04.03.2026
Как создать свой виджет в WordPress с примерами кода
15.11.2025
WooCommerce: как использовать хуки для добавления пользовательских полей в корзину
22.04.2026
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее