WooCommerce: автоматическое удаление неактивных вариаций товаров с помощью кода

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

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

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

Альтернативный способ — написать скрипт, который автоматически удалит вариации, неактивные по определённым критериям, например, не продававшиеся более месяца или с нулевым остатком длительное время.

Пошаговое решение: автоматическое удаление неактивных вариаций

1. Определяем критерии неактивности вариаций

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

  • Вариация не имеет продаж за последние 30 дней.
  • Вариация находится в статусе "черновик" или "отключена" (отключена через кастомное поле или мета-данные).

2. Получаем список вариаций по критериям

Используем WP_Query для выборки вариаций с типом product_variation и дополнительными условиями.

$args = [
    'post_type'      => 'product_variation',
    'posts_per_page' => -1,
    'post_status'    => ['draft', 'private'],
    'meta_query'     => [
        [
            'key'     => '_last_sale_date', // кастомное поле с датой последней продажи
            'value'   => date('Y-m-d', strtotime('-30 days')),
            'compare' => '<=',
            'type'    => 'DATE',
        ],
    ],
];
$query = new WP_Query($args);

Важно: поле _last_sale_date необходимо поддерживать, например, обновляя его через хук при продаже.

3. Удаляем выбранные вариации

Проходим циклом по результатам и удаляем вариации стандартной функцией wp_delete_post().

foreach ($query->posts as $variation_id) {
    wp_delete_post($variation_id, true); // true — безвозвратно
}

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

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

function schedule_variation_cleanup() {
    if (! wp_next_scheduled('cleanup_inactive_variations_hook')) {
        wp_schedule_event(time(), 'daily', 'cleanup_inactive_variations_hook');
    }
}
add_action('wp', 'schedule_variation_cleanup');

add_action('cleanup_inactive_variations_hook', 'cleanup_inactive_variations_function');

function cleanup_inactive_variations_function() {
    // Здесь код удаления вариаций (пункты 2-3)
}

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

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

  • Число вариаций должно уменьшиться.
  • Отсутствие удалённых вариаций в списке вариаций товаров.
  • Логи запуска (если настроены) должны содержать информацию о количестве удалённых записей.

Рекомендуется делать резервную копию базы перед запуском скрипта.

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

  • Отсутствие данных о последней продаже: без мета-поля с датой последней продажи невозможно корректно фильтровать. Решение — добавить хук woocommerce_order_status_completed для обновления поля _last_sale_date у вариаций.
  • Удаление активных вариаций: ошибочный фильтр post_status может затронуть активные варианты. Проверяйте условия запроса перед удалением.
  • WP-Cron не запускается: если сайт не посещается регулярно, WP-Cron задачи могут не срабатывать. Для надёжности настройте системный cron на вызов wp-cron.php.

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

  • Всегда создавайте резервные копии базы перед массовыми удалениями.
  • Добавляйте в код логирование результатов для мониторинга работы скрипта.
  • Используйте wp_delete_post($id, true) для полного удаления, либо false для перемещения в корзину.
  • В больших магазинах запускайте удаление партиями, чтобы не перегружать сервер.
  • Оптимизируйте запросы, используйте индексы по мета-данным.

Сравнение методов удаления неактивных вариаций

МетодОписаниеПлюсыМинусы
Ручное удаление через админку Выбор и удаление вариаций вручную Простота, контроль Длительно, не подходит для большого каталога
Плагины автоматизации Готовые решения для очистки товаров/вариаций Удобно, настройка без кода Могут быть платными, нагрузка на сайт
Код на PHP + WP-Cron Скрипт удаляет вариации по заданным правилам автоматически Гибкость, полная кастомизация Требует навыков программирования
WooCommerce: автоматическое изменение статусов заказов по условиям
23.06.2026
Автоматическое удаление неактивных пользователей WooCommerce
25.04.2026
Как автоматически отправлять сообщения в Telegram из WordPress
25.02.2026
WooCommerce: автоматическое создание отзывов после покупки
23.05.2026
Как добавить дополнительное поле в форму регистрации WordPress с сохранением и валидацией
11.12.2025