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

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

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

Как определить неактивные варианты товаров в WooCommerce

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

  • Отсутствие остатков (stock_quantity = 0)
  • Статус варианта "черновик" или "в корзине" (draft, pending)
  • Дата последнего обновления или продажи превышает заданный срок (например, 6 месяцев)

В этом руководстве возьмем критерий — варианты с нулевым запасом и которые не обновлялись более 180 дней.

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

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

function wp_remove_inactive_variations() {
    $args = array(
        'post_type'      => 'product_variation',
        'posts_per_page' => -1,
        'post_status'    => array('publish', 'private'),
        'date_query'     => array(
            array(
                'column'    => 'post_modified_gmt',
                'before'    => '180 days ago',
            ),
        ),
        'fields'         => 'ids',
    );

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

    foreach ($variations as $variation_id) {
        $stock = get_post_meta($variation_id, '_stock', true);
        if ($stock === '0' || $stock === '') {
            wp_delete_post($variation_id, true);
            $removed++;
        }
    }
    error_log("Удалено неактивных вариантов: $removed");
}

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

add_action('wp_remove_inactive_variations_hook', 'wp_remove_inactive_variations');

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

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

Для тестирования добавьте вызов функции wp_remove_inactive_variations() в файл functions.php или через консоль WP-CLI:

wp eval 'wp_remove_inactive_variations();'

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

  • В админке WooCommerce перейдите в раздел "Вариации товаров" и убедитесь, что отсутствуют варианты с нулевым запасом и датой обновления более 180 дней.
  • Проверьте логи сервера или файл debug.log (если включен WP_DEBUG_LOG) на наличие записи в формате "Удалено неактивных вариантов: N", где N — число удаленных вариантов.
  • Запустите повторно функцию вручную, чтобы проверить, что неактивных вариантов больше нет или они удаляются корректно.

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

  • Функция не удаляет варианты: убедитесь, что в базе есть варианты, которые соответствуют условиям (stock = 0 и старше 180 дней). Проверьте, что метаполе _stock используется, а не _stock_status.
  • Удаляются не те варианты: проверьте правильность фильтра date_query, возможно, дата обновления используется неверно. Можно заменить на post_date_gmt, если требуется.
  • Крон-задача не запускается: проверьте, активен ли WP-Cron на вашем сайте, и нет ли ограничений хостинга. Для теста запустите функцию вручную.
  • Ошибки доступа: убедитесь, что функция вызывается с правами администратора, чтобы удалить посты.

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

  • Всегда создавайте резервную копию базы данных перед массовыми удалениями.
  • Если у вас большой магазин с тысячами вариантов, разбейте удаление на партии по 100-200 штук, чтобы не перегружать сервер:
$args['posts_per_page'] = 100;
// после удаления запускать функцию повторно, пока есть подходящие варианты
  • Логируйте результаты удаления в отдельный файл, чтобы отслеживать работу скрипта.
  • Отключайте WP-Cron и используйте системный cron для надежности, если сайт большой.
  • Проверяйте, что удаление не затрагивает варианты с активным заказом или которые недавно обновлялись.

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

МетодПлюсыМинусыПодходит для
Код через WP-CronГибкость, настройка под любые условия, бесплатноТребует навыков программирования, может нагружать серверСредние и крупные магазины с программистом
Плагины очистки базы (например, Clearfy Pro)Простота установки, набор функций оптимизацииМожет не поддерживать сложные фильтры под вариантыМалые магазины, пользователи без кода
Ручное удаление в админке WooCommerceПолный контроль, без риска ошибок кодаНеэффективно при большом объеме, трудоемкоМалые магазины, единичные случаи
Как изменить URL изображения в WordPress без плагинов
18.01.2026
Автоматический импорт данных из Яндекс.Таблиц в WordPress
15.03.2026
WooCommerce: как автоматически удалять товары из корзины по атрибутам
04.05.2026
Как автоматизировать создание резервных копий базы данных WordPress
15.12.2025
Как автоматизировать управление публикациями в WordPress с помощью WP-Cron и кода
11.04.2026

Возникли задачи по WP? Вы можете задать свой вопрос на FAQwp.com Либо обратиться к специалистам поддержки.