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

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

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

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

  • Проверить количество вариаций товаров через админку WooCommerce — в разделе «Товары» фильтровать по типу «Вариация».
  • Оценить размер таблиц wp_posts и wp_postmeta в базе данных, связанных с вариациями.
  • Использовать SQL-запрос для выявления неактивных вариаций:
SELECT ID, post_title, post_status FROM wp_posts WHERE post_type = 'product_variation' AND post_status = 'trash';

или для вариаций со статусом draft и pending.

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

Реализуем WP-Cron задачу, которая еженедельно автоматически удаляет вариации с определёнными статусами (trash, draft, pending).

1. Добавляем функцию удаления неактивных вариаций

function wproot_delete_inactive_variations() {
    global $wpdb;
    $statuses = ['trash', 'draft', 'pending'];
    foreach ($statuses as $status) {
        $variations = $wpdb->get_col($wpdb->prepare(
            "SELECT ID FROM {$wpdb->posts} WHERE post_type = %s AND post_status = %s",
            'product_variation', $status
        ));
        if (!empty($variations)) {
            foreach ($variations as $variation_id) {
                wp_delete_post($variation_id, true); // Без возможности восстановления
            }
        }
    }
}

2. Регистрируем WP-Cron задачу

add_action('wproot_delete_inactive_variations_hook', 'wproot_delete_inactive_variations');

function wproot_schedule_inactive_variations_deletion() {
    if (!wp_next_scheduled('wproot_delete_inactive_variations_hook')) {
        wp_schedule_event(time(), 'weekly', 'wproot_delete_inactive_variations_hook');
    }
}
add_action('wp', 'wproot_schedule_inactive_variations_deletion');

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

add_action('admin_init', function() {
    if (current_user_can('manage_woocommerce') && isset($_GET['run_inactive_variations_deletion'])) {
        wproot_delete_inactive_variations();
        wp_redirect(remove_query_arg('run_inactive_variations_deletion'));
        exit;
    }
});

Для запуска вручную достаточно перейти по адресу https://example.com/wp-admin/?run_inactive_variations_deletion=1 (замените example.com на ваш домен).

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

  • Перейдите в раздел «Товары» — убедитесь, что неактивные вариации исчезли.
  • Выполните SQL-запрос из раздела диагностики — записи с указанными статусами должны отсутствовать.
  • Проверьте размер базы данных и время загрузки страниц с товарами — они должны улучшиться.

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

  • Задача WP-Cron не срабатывает: убедитесь, что на сайте есть посещения, или настройте системный cron для wp-cron.php.
  • Удаляются нужные вариации: проверьте, что в функции фильтруются только статусы trash, draft и pending, а не publish.
  • Неправильные права доступа: функция запускается только для пользователей с правами manage_woocommerce.

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

  • Всегда используйте wp_delete_post($id, true) с параметром true для полного удаления, чтобы не оставлять мусор в базе.
  • Резервное копирование базы перед внедрением автоматических удалений — критично для предотвращения потери данных.
  • Для больших баз данных оптимизируйте запросы с помощью индексов и планируйте удаление в ночное время, чтобы не нагружать сервер.
  • Используйте плагины вроде Clearfy Pro для дополнительно автоматизации и очистки базы без лишнего кода.

Сравнение методов очистки неактивных вариаций

МетодПлюсыМинусыКогда использовать
Ручное удаление через админкуПростота, контрольМного времени, риск пропускаНебольшое количество вариаций
Автоматизация через WP-Cron и кодБыстро, без участия человекаТребует базовых знаний разработкиСредние и большие магазины
Использование плагина Clearfy ProДоп. функции, безопасностьПлатный плагинОптимизация и комплексная очистка

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

⭐⭐⭐⭐⭐
Как использовать Transients в WordPress для кэширования данных
09.02.2026
Как автоматически удалять старые черновики в WordPress
11.04.2026
Как отключить или ограничить AJAX-запросы в WordPress для повышения производительности
24.01.2026
Как отключать способы оплаты в WooCommerce при минимальной сумме заказа
10.08.2026
Как удалить неиспользуемые таблицы базы данных WordPress: практическое руководство
06.01.2026
×
до 3225₽

WPShop - честная партнерка!

Зарабатывай с каждой продажи

Подключиться ⋙