wpcodes.ru wordpress WP Codеs

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

Что значит «неактивные вариации товаров» в WooCommerce

В WooCommerce вариации товаров — это отдельные подтовары с уникальными атрибутами (цвет, размер и т. п.). Под неактивными вариациями понимаются варианты, которые не доступны для покупки, например, со статусом "выключено" или с нулевым запасом, если магазин настроен не показывать отсутствующие позиции.

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

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

  • Проверить наличие вариаций с post_status = 'private' или 'draft', которые не видны покупателям.
  • Проверить запасы вариаций: если запас равен 0 и параметр "скрывать отсутствующие товары" включен, такие вариации считаются неактивными.
  • Использовать SQL-запросы для подсчёта количества вариаций с нулевым запасом и статусом публикации.

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

Реализуем удаление вариаций товаров, которые не опубликованы (post_status != 'publish') или имеют запас 0.

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

function wpcodes_delete_inactive_variations() {
    // Получаем все вариации с post_parent - ID товара
    $args = [
        'post_type' => 'product_variation',
        'post_status' => ['private', 'draft', 'pending'],
        'numberposts' => -1
    ];
    $variations = get_posts($args);
    foreach ($variations as $variation) {
        wp_delete_post($variation->ID, true); // Полное удаление
    }

    // Удаляем вариации с запасом 0 и статусом publish
    $args_stock = [
        'post_type' => 'product_variation',
        'post_status' => 'publish',
        'numberposts' => -1
    ];
    $variations_stock = get_posts($args_stock);
    foreach ($variations_stock as $variation) {
        $stock = get_post_meta($variation->ID, '_stock', true);
        $manage_stock = get_post_meta($variation->ID, '_manage_stock', true);
        if ($manage_stock === 'yes' && intval($stock) <= 0) {
            wp_delete_post($variation->ID, true);
        }
    }
}

// Запускаем функцию по крону или вручную
add_action('init', 'wpcodes_delete_inactive_variations');

Если хотите запускать удаление регулярно, создайте WP-Cron задачу:

if (! wp_next_scheduled('wpcodes_delete_variations_event')) {
    wp_schedule_event(time(), 'daily', 'wpcodes_delete_variations_event');
}
add_action('wpcodes_delete_variations_event', 'wpcodes_delete_inactive_variations');

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

  • В админке WooCommerce перейдите в список вариаций товаров и проверьте, что неактивные вариации удалились.
  • Выполните SQL-запрос в базе:
    SELECT COUNT(*) FROM wp_posts WHERE post_type = 'product_variation' AND post_status IN ('private', 'draft', 'pending'); — результат должен быть 0.
  • Проверьте, что товары с нулевым запасом и управлением складом не имеют вариаций в каталоге.

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

  • Удаление активных вариаций по ошибке: проверьте логику условия удаления, убедитесь, что статус и запас проверяются корректно.
  • Функция не запускается по крону: проверьте, что WP-Cron включён, и событие запланировано. Можно вручную вызвать функцию для теста.
  • Удаление не завершилось полностью: убедитесь в правах пользователя, под которым запускается скрипт, и что нет конфликтов с плагинами безопасности.

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

  • Всегда делайте бэкап базы перед массовым удалением данных.
  • Запускайте скрипт в непиковое время, чтобы избежать нагрузки.
  • Добавьте логирование действий удаления — запись ID удалённых вариаций в файл или базу.
  • При большом количестве вариаций используйте пакетную обработку, чтобы не превышать лимиты памяти и времени выполнения.

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

МетодПреимуществаНедостатки
Ручное удаление через админкуПростота, визуальный контрольТрудоёмко при большом каталоге
Код в functions.php + WP-CronАвтоматизация, гибкость, без плагиновТребует навыков программирования, риск ошибок
Плагины для очистки WooCommerceПростота, GUIМогут влиять на производительность, лишний код
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее