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

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

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

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

Промежуточный статус draft или другие нестандартные статусы указывают на неактивные вариации. Часто вариации становятся неиспользуемыми из-за удаления атрибутов или изменений в каталоге.

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

1. Создание WP-Cron задачи для регулярной очистки

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

if ( ! wp_next_scheduled( 'wpturbo_cleanup_unused_variations' ) ) {
    wp_schedule_event( time(), 'weekly', 'wpturbo_cleanup_unused_variations' );
}

add_action( 'wpturbo_cleanup_unused_variations', 'wpturbo_delete_unused_variations' );

2. Реализация функции удаления неиспользуемых вариаций

Определим функцию, которая в выборке найдет вариации с неактивным статусом и удалит их через стандартный WordPress API:

function wpturbo_delete_unused_variations() {
    global $wpdb;
    
    // Выбираем ID вариаций со статусом draft или trash
    $variations = $wpdb->get_col( "
        SELECT ID FROM {$wpdb->posts} 
        WHERE post_type = 'product_variation' 
        AND post_status IN ('draft', 'trash')
    " );

    if ( empty( $variations ) ) {
        return;
    }
    
    foreach ( $variations as $variation_id ) {
        wp_delete_post( $variation_id, true ); // принудительное удаление
    }
}

3. Запуск очистки вручную для проверки

Для теста можно вызвать функцию напрямую из админки через админский action или временно добавить вызов в init:

// ТОЛЬКО для теста
add_action( 'admin_init', function() {
    wpturbo_delete_unused_variations();
} );

После проверки удалите этот вызов, чтобы избежать постоянного запуска.

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

Для проверки выполните SQL-запрос на выборку вариаций со статусом draft или trash. Если функция сработала, таких записей не будет. Также проверьте количество записей в админке WooCommerce — неиспользуемые вариации должны исчезнуть.

Дополнительно можно использовать плагин Query Monitor для мониторинга количества запросов к базе и времени их выполнения до и после очистки.

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

  • Ошибка: WP-Cron не запускается автоматически.
    Причина: На сайте нет трафика или WP-Cron отключен.
    Решение: Настройте системный cron для запуска wp-cron.php или используйте плагин WP Crontrol для проверки событий.
  • Ошибка: Функция не удаляет вариации.
    Причина: Неправильные статусы или вариации имеют статус publish, а не draft.
    Решение: Проверьте, какие статусы используют ваши неиспользуемые вариации, и добавьте их в запрос.
  • Ошибка: Удаляются нужные вариации.
    Причина: Логика определения неиспользуемых слишком агрессивна.
    Решение: Добавьте дополнительную проверку, например, по времени создания или связи с активным продуктом.

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

  • Всегда делайте резервную копию базы данных перед массовым удалением записей.
  • Удаляйте вариации пакетами, если база большая, чтобы избежать превышения лимита памяти или таймаута.
  • Используйте транзакции MySQL, если планируете более сложные операции.
  • Оптимизируйте WP-Cron с помощью сторонних решений или системного планировщика задач.

Альтернативные методы очистки: сравнение

МетодПлюсыМинусыПрименимость
Плагин очистки вариацийУдобство, UI, безопасные операцииНагрузка, требует установкиДля пользователей без кода
Ручной SQL-запросБыстрое удалениеРиск ошибочного удаления, нет логикиДля опытных администраторов
Автоматическая WP-Cron задача (код)Автоматизация, гибкостьТребует настройки, возможны ошибки логикиДля разработчиков
WooCommerce: автоматическая отправка письма с подтверждением заказа через код
20.07.2026
WooCommerce: как реализовать авторизацию через SMS без плагинов
01.07.2026
Как использовать хуки в WordPress для оптимизации кода
09.11.2025
Как создать динамический список постов с фильтрами в WordPress без плагинов
19.12.2025
Автоматическое удаление неиспользуемых вариаций товаров в WooCommerce через код
23.05.2026