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

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

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

Чтобы убедиться, что в магазине есть такие вариации, выполните SQL-запрос в базе данных на поиск вариаций с нулевым остатком и без заказов:

SELECT p.ID, p.post_title, pm.meta_value AS stock_status
FROM wp_posts p
LEFT JOIN wp_postmeta pm ON p.ID = pm.post_id AND pm.meta_key = '_stock_status'
WHERE p.post_type = 'product_variation'
AND (pm.meta_value = 'outofstock' OR pm.meta_value IS NULL);

Также проверьте, что вариации не связаны с активными заказами, чтобы не удалить нужные позиции.

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

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

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

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

    $variations = get_posts( $args );

    foreach ( $variations as $variation_id ) {
        $orders = wc_get_orders(array(
            'limit' => 1,
            'status' => array('completed', 'processing', 'on-hold'),
            'meta_key' => '_product_id',
            'meta_value' => $variation_id
        ));

        if ( empty($orders) ) {
            wp_delete_post( $variation_id, true );
        }
    }
}

// Запускаем функцию с помощью WP-CLI или вручную
// wpb_delete_outofstock_variations();

2. Автоматизация с помощью WP-Cron

Чтобы запускать удаление по расписанию, добавьте событие WP-Cron, например, раз в неделю:

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

add_action( 'wpb_weekly_variation_cleanup', 'wpb_delete_outofstock_variations' );

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

  • Выполните SQL-запрос из раздела диагностики до и после запуска функции, чтобы убедиться, что вариации удалились.
  • Проверьте в админке WooCommerce раздел «Вариации» у товаров: не должно быть вариаций со статусом «Нет в наличии».
  • Просмотрите логи ошибок и работу сайта — удаление не должно вызывать сбоев.

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

  • Удаление нужных вариаций: если функция удаляет вариации, которые еще нужны, убедитесь, что фильтр по заказам работает корректно. Проверьте, что wc_get_orders ищет по правильному мета-ключу и статусам заказов.
  • Отсутствие результатов удаления: если вариации не удаляются, проверьте, содержит ли поле _stock_status правильные значения (часто бывает, что используется другой мета-ключ для наличия).
  • Проблемы с WP-Cron: если автоматический запуск не работает, убедитесь, что на сайте включен WP-Cron и нет ограничений на его выполнение.

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

  • Всегда создавайте резервную копию базы данных перед массовыми удалениями.
  • Запускайте удаление в периоды низкой нагрузки, особенно если вариаций много.
  • Используйте wp_delete_post($variation_id, true) с параметром true для полного удаления без попадания в корзину WordPress.
  • При больших магазинах рассмотрите разбивку удаления на порции, чтобы не перегружать сервер.

Сравнение подходов удаления вариаций

МетодПлюсыМинусы
Ручное удаление через админкуПростота, контрольМного времени, ошибки, не подходит для больших магазинов
Использование готовых плагинов (например, Clearfy Pro)Автоматизация, удобствоЗависимость от стороннего кода, возможные конфликты
Самописный код (как в статье)Гибкость, контроль, отсутствие лишних плагиновТребует навыков, ответственность за поддержку
Как отключить автоматическое масштабирование изображений в WooCommerce
24.04.2026
Как настроить производительность WordPress на уровне кода
03.12.2025
WooCommerce: как исправить проблему с не обновляющейся ценой вариаций товаров
22.05.2026
Автоматическое удаление старого метаданных в WordPress
10.04.2026
Создание собственной таблицы базы данных в WordPress с примерами кода
25.12.2025