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

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

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

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

Неиспользуемые варианты обычно характеризуются:

  • Отсутствием продаж или заказов за определённый период.
  • Нулевым или отрицательным остатком на складе.
  • Статусом варианта «в наличии», но без активности.

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

function get_unused_variations( $days = 90 ) {
    $args = [
        'post_type' => 'product_variation',
        'posts_per_page' => -1,
        'date_query' => [
            [
                'before' => date('Y-m-d', strtotime("-" . $days . " days")),
                'column' => 'post_modified',
            ]
        ],
        'meta_query' => [
            [
                'key' => '_stock_status',
                'value' => 'outofstock',
            ]
        ]
    ];
    $query = new WP_Query( $args );
    return $query->posts;
}

Этот код выбирает вариации, которые не обновлялись и находятся вне склада более 90 дней.

Пошаговое решение: автоматическое отключение неиспользуемых вариантов

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

function disable_unused_variations() {
    $unused_variations = get_unused_variations(90); // 90 дней
    foreach ( $unused_variations as $variation_id ) {
        update_post_meta( $variation_id, '_stock_status', 'outofstock' );
        // Дополнительно можно изменить статус вариации на 'draft' или 'private'
        wp_update_post([
            'ID' => $variation_id,
            'post_status' => 'draft'
        ]);
    }
}

2. Настраиваем автоматический запуск через WP-Cron

if ( ! wp_next_scheduled( 'disable_unused_variations_hook' ) ) {
    wp_schedule_event( time(), 'daily', 'disable_unused_variations_hook' );
}
add_action( 'disable_unused_variations_hook', 'disable_unused_variations' );

Этот код запускает проверку и отключение неиспользуемых вариантов ежедневно.

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

  • Проверьте в админке WooCommerce, что варианты с истекшим сроком использования теперь имеют статус «черновик» или «нет в наличии».
  • Запустите функцию вручную, вызвав disable_unused_variations() через консоль WP-CLI или временно добавив вызов в шаблон.
  • Проверьте отчет WooCommerce о продажах и остатков, чтобы убедиться, что отключаются только нужные варианты.

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

  • Ошибка: Варианты не отключаются, хотя условия выполнены.
    Причина: Неверно настроены мета-поля или статусы. Проверьте, что используете правильный ключ _stock_status и что варианты действительно помечены как outofstock.
  • Ошибка: Отключаются активные варианты.
    Причина: Неправильная логика фильтрации или слишком большой период.
    Решение: Уменьшите период до 30 дней и тщательно протестируйте на тестовом сайте.
  • Ошибка: WP-Cron не запускается.
    Решение: Убедитесь, что события WP-Cron активны, или настройте системный cron для вызова wp-cron.php.

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

  • При работе с большим количеством товаров используйте пакетную обработку, чтобы не перегружать сервер. Например, обрабатывать по 50 вариантов за один запуск Cron.
  • Логируйте отключение вариантов в отдельный файл или базу, это поможет отслеживать изменения.
  • Добавьте возможность отмены отключения через админку, например, с помощью пользовательского фильтра.
  • Используйте транзиенты для кеширования результатов запроса вариантов, если запросы занимают много времени.

Сравнение вариантов решения

МетодПреимуществаНедостатки
Ручное отключение через админкуПростота, полный контрольТрудозатратно при большом количестве товаров
Использование плагина (например, Clearfy Pro с оптимизацией)Автоматизация, готовые функции, поддержкаПлатное, ограниченная гибкость
Кастомный код с WP-Cron (описанный способ)Полная кастомизация, бесплатныйТребуются навыки программирования, поддержка кода на вас
Автоматический импорт из Twitter в WordPress: пошаговое руководство
16.04.2026
WooCommerce: как автоматически удалять неоплаченные заказы по расписанию
09.07.2026
WooCommerce: автоматическое обновление статуса заказа после успешной оплаты
14.05.2026
Как создать подписку на новости WordPress с помощью AJAX
15.12.2025
WooCommerce: как избавиться от проблемы повторных заказов после успешной оплаты
26.04.2026