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

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

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

Проверить наличие таких вариаций можно через SQL-запрос к базе данных:

SELECT p.ID, p.post_status, p.post_parent FROM wp_posts p WHERE p.post_type = 'product_variation' AND p.post_status NOT IN ('publish', 'private');

Если таких вариаций много, стоит настроить их автоматическое удаление.

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

1. Создаем PHP-функцию для удаления неактивных вариаций

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

function wpcore_delete_inactive_variations() {
    global $wpdb;

    // Получаем ID вариаций с пост-статусом не 'publish' или 'private'
    $variations = $wpdb->get_col(
        "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'product_variation' AND post_status NOT IN ('publish', 'private')"
    );

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

    foreach ($variations as $variation_id) {
        wp_delete_post($variation_id, true); // Полное удаление без перемещения в корзину
    }
}

2. Автоматизация через wp-cron

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

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

// Подключаем функцию к событию
add_action('wpcore_daily_variation_cleanup', 'wpcore_delete_inactive_variations');

// Очистка расписания при деактивации
function wpcore_clear_variation_cleanup_schedule() {
    $timestamp = wp_next_scheduled('wpcore_daily_variation_cleanup');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wpcore_daily_variation_cleanup');
    }
}

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

Для проверки вызовите функцию вручную в консоли WP-CLI или временно добавьте:

add_action('init', 'wpcore_delete_inactive_variations');

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

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

Чтобы убедиться, что удаление работает:

  • Выполните SQL-запрос из раздела диагностики до и после запуска.
  • Проверьте количество вариаций в админке WooCommerce – неактивные должны исчезнуть.
  • Просмотрите логи ошибок PHP на наличие сбоев.

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

  • Функция не удаляет вариации: проверьте права пользователя и убедитесь, что wp-cron работает. Запустите wp cron event run --due-now через WP-CLI для теста.
  • Удаляются нужные вариации: уточните условие фильтрации, возможно, стоит добавить дополнительные проверки, например, на отсутствие заказов с вариацией.
  • Задержки в выполнении: при большом количестве вариаций разделите удаление на пакеты, используя LIMIT в SQL или пагинацию.

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

  • Удаляйте вариации только после резервного копирования базы данных.
  • Для крупных магазинов лучше запускать очистку в ночное время, чтобы не нагружать сервер.
  • Ограничьте права доступа к функциям удаления, чтобы избежать случайного запуска.
  • Используйте transient cache для кэширования результатов запросов, если планируете расширять функционал.

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

МетодПлюсыМинусы
Ручное удаление через админкуПростота, не требует кодаТрудоемко, риск пропуска вариаций
Плагины очистки (например, Clearfy Pro)Автоматизация, интерфейсНагрузка на сайт, возможны конфликты
Кодовое решение с wp-cronПолный контроль, легковесностьТребует знаний PHP, настройки cron
WooCommerce: автоматическое удаление неактивных вариаций товаров без плагинов
16.06.2026
Как изменить вывод изображений в WordPress без изменения темы
24.01.2026
Динамический фильтр по таксономии в WordPress: подробное руководство
01.03.2026
Как автоматически отключать неиспользуемые плагины в WordPress
14.01.2026
Оптимальные хуки для удаления и изменения контента в WordPress
07.01.2026