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

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

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

Диагностика: как определить неактивные вариации для удаления

В WooCommerce вариация — это тип записи product_variation. Неактивной вариация считается, если:

  • Статус вариации draft, pending или trash — т.е. она не опубликована;
  • Вариация отключена в админке (параметр _stock_status = outofstock и нет возможности купить);
  • Вариация не связана с активным товаром.

Для проверки можно выполнить SQL-запрос в базе данных:

SELECT ID, post_status FROM wp_posts WHERE post_type = 'product_variation' AND post_status != 'publish';

Или использовать WP-CLI:

wp post list --post_type=product_variation --post_status=draft,pending,trash

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

Реализуем функцию, которая будет раз в сутки удалять вариации, неактивные более 30 дней.

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

function wc_delete_inactive_variations() {
    global $wpdb;
    $days_threshold = 30;
    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days_threshold . ' days'));

    // Выбираем ID вариаций с нужным статусом и датой обновления
    $variations = $wpdb->get_col($wpdb->prepare(
        "SELECT ID FROM {$wpdb->posts} 
         WHERE post_type = 'product_variation' 
         AND post_status IN ('draft', 'pending', 'trash') 
         AND post_modified < %s",
         $date_threshold
    ));

    if (empty($variations)) {
        return;
    }

    foreach ($variations as $var_id) {
        wp_delete_post($var_id, true); // жесткое удаление
    }
}

2. Добавить WP-Cron задачу для регулярного запуска

function wc_schedule_variations_cleanup() {
    if (!wp_next_scheduled('wc_cleanup_variations_daily')) {
        wp_schedule_event(time(), 'daily', 'wc_cleanup_variations_daily');
    }
}
add_action('wp', 'wc_schedule_variations_cleanup');
add_action('wc_cleanup_variations_daily', 'wc_delete_inactive_variations');

3. Удалить задачу при деактивации плагина или темы

function wc_clear_variations_cleanup_schedule() {
    $timestamp = wp_next_scheduled('wc_cleanup_variations_daily');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wc_cleanup_variations_daily');
    }
}
register_deactivation_hook(__FILE__, 'wc_clear_variations_cleanup_schedule');

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

  • Запустите вручную функцию wc_delete_inactive_variations() через WP-CLI либо через простой вызов в теме для теста.
  • Проверьте наличие вариаций с неактивным статусом в базе через SQL или WP-CLI — они должны быть удалены.
  • Отслеживайте логи сервера и WooCommerce на предмет ошибок удаления.
  • Через админку WooCommerce убедитесь, что удалённые вариации исчезли из списка вариаций товаров.

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

  • Удаляются активные вариации: Проверьте условие выборки — убедитесь, что post_status точно фильтруется по неактивным статусам.
  • WP-Cron не запускается: На некоторых хостингах WP-Cron запускается только при посещении сайта. Для надежности настройте системный cron или воспользуйтесь плагином WP Crontrol для ручного запуска.
  • Удаление не происходит из-за прав доступа: Убедитесь, что пользователь и скрипт имеют права на удаление записей в базе.
  • Зависание при большом количестве вариаций: Реализуйте пакетное удаление по 50-100 записей за раз, чтобы избежать таймаутов.

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

  • Резервное копирование базы: Перед внедрением автоматического удаления обязательно настройте регулярные бэкапы, например, с помощью WPShop Clearfy Pro или другого надежного решения.
  • Логирование операций: Добавьте запись в лог при каждом удалении вариации для аудита и отладки.
  • Используйте транзакции при массовом удалении: Если база поддерживает, чтобы избежать частичного удаления.
  • Оптимизируйте запросы: Добавьте индексы на колонки post_type и post_status для ускорения выборки.

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

МетодПреимуществаНедостатки
Ручное удаление через админкуПростота, отсутствие кодаТрудоемко при большом количестве вариаций
SQL-запросы напрямуюБыстро и эффективноРиск ошибок, требует бэкапа
Автоматизация через WP-Cron и PHPРегулярность, минимальное участие человекаТребует настройки и тестирования
Плагины очистки базы (например, Clearfy Pro)Дополнительные функции оптимизацииИногда платные, возможна избыточность

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
WooCommerce: автоматическое удаление неактивных заказов с применением WP-Cron
12.07.2026
WooCommerce: как правильно удалять товары с очисткой связанных данных
16.06.2026
WooCommerce: как удалить удалённые вариации товаров из базы данных
09.06.2026
Создаем свой плагин для автоматической оптимизации базы данных WordPress
17.12.2025
Как удалить неиспользуемые мета данные в WordPress для оптимизации базы данных
24.01.2026
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше