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

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

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

Для диагностики можно использовать запросы к базе данных или посмотреть в админке WooCommerce раздел «Вариации» конкретного товара. Но при большом количестве товаров ручная проверка невозможна.

Как проверить наличие неактивных вариаций через базу данных

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

Данный запрос покажет все вариации, которые не опубликованы (например, в статусах draft, private или trash).

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

Реализуем на PHP функцию, которая будет запускаться по Cron и удалять вариации с определённым статусом и условием неактивности. Для примера возьмём вариации, которые находятся в статусе 'draft' или 'private' и не обновлялись более 30 дней.

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

function wpcore_delete_inactive_variations() {
    global $wpdb;

    $threshold_date = date( 'Y-m-d H:i:s', strtotime( '-30 days' ) );

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

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

    foreach ( $variations as $variation_id ) {
        wp_delete_post( $variation_id, true ); // true для полного удаления
    }
}

// Регистрируем Cron задачу
add_action( 'wpcore_cleanup_variations_cron', 'wpcore_delete_inactive_variations' );

// Планируем событие на ежедневное выполнение при активации темы или плагина
function wpcore_schedule_variations_cleanup() {
    if ( ! wp_next_scheduled( 'wpcore_cleanup_variations_cron' ) ) {
        wp_schedule_event( time(), 'daily', 'wpcore_cleanup_variations_cron' );
    }
}
add_action( 'wp', 'wpcore_schedule_variations_cleanup' );

Этот код можно разместить в functions.php темы или в собственном плагине. Он создаст ежедневное задание, которое будет удалять старые неактивные вариации.

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

  • Выполните запрос к базе данных до и после запуска (через phpMyAdmin или WP-CLI)
  • Проверьте наличие вариаций через админку WooCommerce
  • Для отладки можно временно добавить логирование ID удалённых вариаций в файл или в системный лог:
error_log( 'Удалена вариация ID: ' . $variation_id );

Частые ошибки при автоматическом удалении вариаций и как их исправить

  • Удаление нужных вариаций: Неправильно настроенные условия статуса и даты могут привести к удалению активных вариантов. Всегда тестируйте на тестовом сайте!
  • Cron задача не запускается: Проверьте, что WP-Cron активен, либо настройте системный cron для wp-cron.php.
  • Проблемы с правами: Функция wp_delete_post требует прав администратора — убедитесь, что код запускается от имени админа.
  • Превышение времени выполнения: Если слишком много вариаций, разделите удаление на части с помощью batch-обработки или WP-CLI.

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

  • Перед внедрением создайте резервную копию базы данных.
  • Добавьте логирование действий для мониторинга работы скрипта.
  • Если база большая, используйте WP-CLI для пакетного удаления вариаций с ограничением по количеству.
  • Отключите удаление автоматом на время пиковых нагрузок.
  • Регулярно оптимизируйте базу данных после массовых удалений (например, через плагин Clearfy Pro или вручную).

Сравнение подходов: плагин vs. код vs. WP-CLI

МетодПлюсыМинусы
ПлагинПростота использования, готовые настройки, безопасные интерфейсыДополнительная нагрузка, возможные конфликты, ограниченная гибкость
Код (функции в теме/плагине)Гибкость, контроль, минимальная нагрузкаТребует знаний PHP, риск ошибок, необходимость тестирования
WP-CLIОчень быстро, подходит для больших баз, можно запускать вручную или в cronТребует доступа к серверу, знание командной строки
Как создать постоянные содержимые в WordPress с помощью Transient Cache
22.03.2026
WooCommerce: автоматическое удаление неактивных заказов по дате
20.04.2026
WooCommerce: как автоматически очищать базу от старых и отменённых заказов
16.05.2026
Как автоматизировать создание резервных копий в WordPress через Cron
18.12.2025
Как добавить многоуровневое меню в WordPress с помощью кода
13.03.2026