Как автоматически удалять неактивные варианты товаров WooCommerce

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

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

Неактивные варианты – это варианты с установленным статусом "черновик" или "отключено" (например, если вы используете плагин для управления статусом вариантов). WooCommerce по умолчанию не удаляет такие варианты автоматически.

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

Для начала нужно проверить, есть ли в вашем магазине неактивные варианты:

SELECT ID, post_title, post_status FROM wp_posts
WHERE post_type = 'product_variation' AND post_status != 'publish';

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

Пошаговое решение: автоматическое удаление неактивных вариантов с помощью WP-Cron

Чтобы регулярно очищать базу от неактивных вариантов, реализуем функцию удаления и запустим её по расписанию через WP-Cron.

1. Создаём функцию удаления неактивных вариантов

function wplesson_delete_inactive_variations() {
    global $wpdb;
    $inactive_variations = $wpdb->get_col(
        "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'product_variation' AND post_status != 'publish'"
    );

    if (empty($inactive_variations)) {
        return;
    }

    foreach ($inactive_variations as $variation_id) {
        wp_delete_post($variation_id, true); // true - удаление без отправки в корзину
    }
}

2. Регистрируем задачу WP-Cron для еженедельного запуска

function wplesson_schedule_variation_cleanup() {
    if (!wp_next_scheduled('wplesson_weekly_variation_cleanup')) {
        wp_schedule_event(time(), 'weekly', 'wplesson_weekly_variation_cleanup');
    }
}
add_action('wp', 'wplesson_schedule_variation_cleanup');

add_action('wplesson_weekly_variation_cleanup', 'wplesson_delete_inactive_variations');

3. Опционально: запуск функции вручную для теста

// Запуск из functions.php или через консоль WP-CLI
wplesson_delete_inactive_variations();

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

  • Запустите функцию вручную (пункт 3) и убедитесь, что неактивные варианты исчезли из админки (Товары > Вариации).
  • Повторите SQL-запрос из раздела диагностики — он должен вернуть пустой результат.
  • Проверьте логи ошибок и работу CRON, чтобы убедиться, что автоматическая очистка сработает по расписанию.

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

  • Не удаляются варианты: Проверьте, что у вас есть права на удаление записей и что функция wp_delete_post вызывается с флагом true для полного удаления.
  • WP-Cron не запускается: Убедитесь, что на вашем сервере правильно настроен WP-Cron или используйте системный cron для вызова wp-cron.php.
  • Удаляются активные варианты: Проверьте условия в запросе, чтобы удалять только варианты с post_status != 'publish'.
  • Нагрузка на сайт: Если вариантов очень много, разбейте удаление на партии, чтобы не перегружать сервер.

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

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

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

МетодПлюсыМинусыРекомендуемые случаи
Ручное удаление через админкуПростота, контрольТрудозатратно при большом количествеМаленькие магазины
Автоматизация через WP-Cron и кодАвтоматизация, регулярностьНеобходимы навыки программированияСредние и большие магазины
Плагины для очистки WooCommerceГотовое решениеМожет быть лишним, зависит от плагинаЕсли нужна дополнительная функциональность
Как автоматизировать работу с медиафайлами в WordPress
30.11.2025
Как избежать проблем с конфликтами при использовании нескольких плагинов AJAX в WordPress
13.06.2026
Как автоматически добавлять атрибуты alt к изображениям в WordPress
15.03.2026
Как отключить автовоспроизведение видео в WordPress
12.02.2026
Как избежать проблем с производительностью при многоязычности в WordPress
13.12.2025