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

Проблема: накопление неактивных вариаций в WooCommerce

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

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

Для начала проверим, сколько вариаций товаров с мета-данными статуса "неактивно" или с признаком скрытия от каталога. В WooCommerce вариации — это дочерние записи типа product_variation. Статус публикации вариации может быть private или draft, чтобы скрыть их из каталога.

Для диагностики используем следующий запрос в базе данных (через phpMyAdmin или WP CLI):

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

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

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

Создадим функцию, которая будет запускаться по крону или вручную, и удалять все вариации с post_status отличным от publish. Это безопаснее, чем удалять вариации со статусом publish, так как активные варианты останутся.

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

function wpdesk_delete_inactive_variations() {
    $args = array(
        'post_type'      => 'product_variation',
        'post_status'    => array('draft', 'pending', 'private', 'trash'),
        'posts_per_page' => -1,
        'fields'         => 'ids',
    );
    
    $variations = get_posts($args);
    if (empty($variations)) {
        error_log('No inactive variations found for deletion.');
        return;
    }

    foreach ($variations as $variation_id) {
        wp_delete_post($variation_id, true); // true — без перемещения в корзину
        error_log("Deleted variation ID: {$variation_id}");
    }
}

Для запуска вручную вызовите в консоли WP CLI:

wp eval 'wpdesk_delete_inactive_variations();'

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

add_action('wp_loaded', function() {
    if (!wp_next_scheduled('wpdesk_delete_inactive_variations_cron')) {
        wp_schedule_event(time(), 'daily', 'wpdesk_delete_inactive_variations_cron');
    }
});

add_action('wpdesk_delete_inactive_variations_cron', 'wpdesk_delete_inactive_variations');

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

  • Выполните SQL-запрос из раздела диагностики и убедитесь, что количество вариаций с неактивным статусом уменьшилось.
  • Проверьте раздел «Товары» → «Вариации» в админ-панели: неактивные вариации должны быть удалены.
  • В логах PHP (error_log) будут записи об удалённых ID вариаций.

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

  • Удаление активных вариаций: Используйте только статусы, отличные от publish. Проверьте, что в вашем магазине вариации с нужным статусом действительно не активны.
  • Отсутствие прав доступа: Функция должна запускаться с правами администратора, иначе wp_delete_post() может не сработать.
  • Крон не запускается: Проверьте, работает ли WP Cron на вашем хостинге. Для отладки можно использовать плагин WP Crontrol.
  • Перемещение в корзину вместо удаления: Если нужно удалять безвозвратно, используйте второй параметр true в wp_delete_post().

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

  • Перед массовым удалением сделайте резервную копию базы данных.
  • Запускайте удаление партиями по 50-100 вариаций, если у вас очень большой магазин, чтобы избежать таймаутов.
  • Используйте WP CLI для выполнения задачи, это быстрее и надежнее, чем веб-запросы.
  • Добавьте логирование действий для контроля и диагностики.
  • Проверяйте, что удалённые вариации не используются в заказах или отчетах, чтобы не нарушить целостность данных.

Сравнение подходов: плагин vs кастомный код

МетодПреимуществаНедостатки
Плагин очистки WooCommerce (например, WP Sweep, Advanced Database Cleaner) Простота установки, интерфейс, универсальность очистки Может удалять лишние данные, не всегда гибко настроить фильтры вариаций
Кастомный код (описанный выше) Точная настройка удаления, автоматизация, контроль процесса, логирование Требует навыков разработки, нужно тестировать и поддерживать
Как ограничить доступ к страницам WordPress по ролям пользователей
11.12.2025
Как создать автоматический импорт контента из Telegram бота в WordPress
03.04.2026
WooCommerce: автоматическое удаление неактивных вариантов товаров
17.06.2026
WooCommerce: как удалить варианты товара без прямого вмешательства в базу данных
04.06.2026
Как изменить статус доставки в WooCommerce через хук заказа
18.04.2026

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