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

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

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

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

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

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

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

function wpf_delete_inactive_variations() {
    $args = [
        'post_type' => 'product_variation',
        'posts_per_page' => -1,
        'fields' => 'ids',
        'meta_query' => [
            [
                'key' => '_stock_status',
                'value' => 'outofstock',
            ],
        ],
    ];

    $variations = get_posts($args);

    foreach ($variations as $variation_id) {
        wp_delete_post($variation_id, true); // Удаляем навсегда
    }
}

2. Запуск функции через WP-Cron для регулярного удаления

Чтобы запускать эту очистку регулярно (например, раз в сутки), добавьте WP-Cron событие:

if (!wp_next_scheduled('wpf_daily_variation_cleanup')) {
    wp_schedule_event(time(), 'daily', 'wpf_daily_variation_cleanup');
}

add_action('wpf_daily_variation_cleanup', 'wpf_delete_inactive_variations');

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

Для проверки:

  • Вручную вызовите функцию wpf_delete_inactive_variations() через консоль WP-CLI или временно добавьте вызов в functions.php.
  • Проверьте, что все вариации с _stock_status = 'outofstock' удалены из базы (таблица wp_posts с типом product_variation).
  • Убедитесь, что на фронтенде вариации больше не отображаются, а страницы товаров работают без ошибок.

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

  • Удаляются нужные варианты: Проверьте, что условие _stock_status = 'outofstock' однозначно определяет неактивные варианты. Если нужно, добавьте дополнительную проверку по дате последней продажи.
  • Функция не запускается по расписанию: Убедитесь, что WP-Cron работает. Проверьте, не отключен ли он в wp-config.php через DISABLE_WP_CRON.
  • Превышение лимита памяти или времени выполнения: При большом количестве вариаций разбивайте удаление на части или используйте пакетную обработку.

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

  • Перед удалением сделайте резервную копию базы данных.
  • Для крупных магазинов лучше выполнять удаление через WP-CLI с ограничением количества записей за один вызов.
  • Используйте wp_delete_post($id, true) для полного удаления, включая метаданные.
  • Проверьте совместимость с другими плагинами, которые могут работать с вариациями (например, складской учет).

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

МетодПлюсыМинусыКомпромисс
Ручное удаление через админку Простота, контроль Долго, риск пропуска Для мелких магазинов
Код с WP-Cron (как в статье) Автоматизация, регулярность Требует настройки, возможны ошибки Оптимально для средних магазинов
Удаление через WP-CLI Быстро, эффективно для больших баз Нужен доступ к серверу, навыки CLI Для продвинутых пользователей
Как автоматически отключить XML-RPC в WordPress для повышения безопасности
06.04.2026
Автоматическое отключение внешних embed-контентов в WordPress для ускорения сайта
19.03.2026
WooCommerce: как автоматически отправлять кастомные сообщения при изменении статуса заказа
29.05.2026
Как удалить неиспользуемые метаданные из базы данных WordPress для оптимизации
05.01.2026
Как создать адаптивный блок с помощью CSS и JavaScript в WordPress
11.12.2025