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

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

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

Как диагностировать наличие неактивных вариаций

Для начала нужно понять, сколько вариаций в вашем магазине помечены как неактивные (статус «черновик» или «отключено»). Для этого можно выполнить SQL-запрос напрямую в базе данных или через WP-CLI.

SELECT COUNT(ID) FROM wp_posts WHERE post_type = 'product_variation' AND post_status != 'publish';

Если число неактивных вариаций велико (например, несколько тысяч), это повод задуматься об их удалении.

Диагностика через WP-CLI

Выполните команду:

wp post list --post_type=product_variation --field=ID --status=draft,pending,future

Она выведет список ID вариаций с неподходящим статусом.

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

Реализуем код в виде функции, которую можно добавить в functions.php темы или в собственный плагин. Скрипт удалит вариации с статусом «черновик» или «отключено», которые не обновлялись более 30 дней.

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

    // Получаем ID вариаций, которые не публикуются и не обновлялись более 30 дней
    $variations = $wpdb->get_col($wpdb->prepare(
        "SELECT ID FROM {$wpdb->posts} 
        WHERE post_type = 'product_variation' 
        AND post_status != 'publish' 
        AND post_modified < %s",
        $date_threshold
    ));

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

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

// Запускаем раз в сутки с помощью хука cron
add_action('wproot_daily_cleanup', 'wproot_delete_inactive_variations');

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

Этот код:

  • Ищет вариации с статусом не «publish» и датой изменения старше 30 дней.
  • Удаляет их навсегда (без перемещения в корзину).
  • Запускает процесс автоматически через ежедневный WP-Cron.

Как проверить, что удаление сработало

1. До запуска функции выполните SQL-запрос на подсчет неактивных вариаций (пример выше). Запомните число.
2. Запустите cron задачу вручную через WP-CLI:

wp cron event run wproot_daily_cleanup

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

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

  • Удаляются нужные вариации — проверьте, что в функции фильтр на статус и дату корректный. Возможно, стоит увеличить порог дней или добавить дополнительные проверки.
  • Функция не запускается по cron — проверьте, что WP-Cron активирован, и событие запланировано (через wp cron event list).
  • Ошибки прав доступа — убедитесь, что пользователь, под которым запускается WP-CLI или веб-сервер, имеет права на удаление записей.
  • Перемещение в корзину вместо удаления — используется wp_delete_post($id, false), замените на true для жесткого удаления.

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

  • Перед внедрением сделайте резервную копию базы данных.
  • Тестируйте на staging-сайте с аналогичной базой.
  • Для крупных магазинов с тысячами вариаций используйте пакетное удаление, чтобы не перегружать сервер:
foreach (array_chunk($variations, 100) as $chunk) {
    foreach ($chunk as $variation_id) {
        wp_delete_post($variation_id, true);
    }
    sleep(1); // пауза для снижения нагрузки
}
  • Добавьте логирование удалений в отдельный файл для аудита.
  • Если используете кеширование, после удаления сбрасывайте кеш.

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

МетодПлюсыМинусыКогда использовать
Ручное удаление через админкуПростота, контрольДолго при большом объеме, риск пропускаНебольшие магазины
SQL-запросы для удаленияОчень быстроРиск ошибок при неправильном запросе, нет логикиОпытные админы, разовая чистка
Автоматизация через WP-Cron и PHPАвтоматизация, безопасность, гибкостьНагрузка на сервер, требует тестированияБольшие магазины, регулярная чистка

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

⭐⭐⭐⭐⭐
WooCommerce: как автоматически удалять неактивные заказы и очищать базу
05.05.2026
Как отключить уведомления по email от комментариев WordPress
09.01.2026
Как проверить и исправить ошибки базы данных WordPress: практическое руководство
22.02.2026
Как создать свой плагин WordPress с настройками: пошаговое руководство
05.11.2025
Как использовать Transients в WordPress для кэширования данных
09.02.2026
×

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

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

пишет статьи

готовит SEO

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

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