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

В чем проблема с неактивными вариациями товаров в WooCommerce

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

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

Диагностика неактивных вариаций

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

  • Статус вариации — draft или private (не опубликована)
  • Отсутствуют продажи за определенный период (например, 6 месяцев)
  • Отсутствует актуальный складской запас (qty == 0) или вариация отключена в настройках

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

SELECT COUNT(*) FROM wp_posts p
JOIN wp_postmeta pm ON p.ID = pm.post_id
WHERE p.post_type = 'product_variation'
AND p.post_status IN ('draft','private')
AND pm.meta_key = '_stock'
AND pm.meta_value = '0';

Этот запрос покажет количество вариаций с нулевым запасом и статусом неактивности.

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

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

function wp_remove_inactive_variations() {
    global $wpdb;
    
    // Получаем ID вариаций, которые неактивны
    $inactive_variations = $wpdb->get_col(
        "SELECT p.ID FROM {$wpdb->posts} p
         LEFT JOIN {$wpdb->postmeta} pm ON p.ID = pm.post_id AND pm.meta_key = '_stock'
         WHERE p.post_type = 'product_variation'
         AND p.post_status IN ('draft', 'private')
         AND (pm.meta_value = '0' OR pm.meta_value IS NULL)"
    );
    
    if (empty($inactive_variations)) {
        return 'Нет неактивных вариаций для удаления.';
    }
    
    foreach ($inactive_variations as $variation_id) {
        wp_delete_post($variation_id, true); // полное удаление
    }
    
    return count($inactive_variations) . ' неактивных вариаций удалено.';
}

2. Запускаем функцию через WP-CLI или Cron

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

wp eval 'echo wp_remove_inactive_variations();'

Или добавьте Cron-задачу для регулярного удаления:

add_action('wp_scheduled_delete_inactive_variations', 'wp_remove_inactive_variations');

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

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

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

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

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

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

  • Перед удалением делайте резервную копию базы данных.
  • Не запускайте массовое удаление в часы пик, чтобы не нагружать сервер.
  • Добавьте логирование удаленных вариаций в отдельный файл для аудита.
  • Если вариаций очень много, делайте удаление партиями, чтобы избежать таймаутов.

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

МетодПлюсыМинусы
Удаление вручную в админкеПростота, нет риска автокодаОчень долго, неудобно при большом количестве вариаций
Плагины очисткиАвтоматизация, готовые интерфейсыНагрузка, лишний код, возможные конфликты
Собственный код + CronГибкость, контроль, без лишних плагиновТребует навыков разработки, нужно тестировать
Автоматический импорт из Google Sheets в WordPress
04.04.2026
WooCommerce: как автоматически удалять отменённые заказы по дате
05.05.2026
Как быстро удалить пустые термины в WordPress
04.02.2026
Как использовать WPGPT для автоматического создания контента в WordPress
16.04.2026
Как использовать WPRemark для оценки комментариев в WordPress
01.01.2026