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

Что такое неактивные вариации и зачем их удалять?

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

Автоматическое удаление таких вариаций помогает поддерживать базу в чистоте и ускоряет работу сайта, особенно при большом каталоге.

Диагностика: как определить неактивные вариации

Для начала нужно понять, какие вариации считаются неактивными. Обычно это вариации, у которых статус publish не установлен или вариации, которые не связаны с текущими товарами.

Используйте следующий SQL-запрос для диагностики (через phpMyAdmin или WP-CLI):

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

Этот запрос выведет все вариации, статус которых не publish. Если таких много, имеет смысл их удалить.

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

1. Создание функции для очистки базы

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

function wc_delete_inactive_product_variations() {
    global $wpdb;
    // Получаем ID неактивных вариаций
    $inactive_variations = $wpdb->get_col(
        "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'product_variation' AND post_status != 'publish'"
    );

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

    foreach ($inactive_variations as $variation_id) {
        wp_delete_post($variation_id, true); // Жесткое удаление
    }
}

// Добавляем задачу в WP-Cron, запуск раз в сутки
if (!wp_next_scheduled('wc_delete_inactive_variations_hook')) {
    wp_schedule_event(time(), 'daily', 'wc_delete_inactive_variations_hook');
}
add_action('wc_delete_inactive_variations_hook', 'wc_delete_inactive_product_variations');

2. Запуск функции вручную (для теста)

Чтобы проверить работу скрипта без ожидания WP-Cron, выполните вызов функции вручную, например, добавив в functions.php временную строку:

add_action('admin_init', function() {
    wc_delete_inactive_product_variations();
});

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

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

Для проверки:

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

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

  • Не удаляются вариации: проверьте, что WP-Cron работает (например, установите плагин WP Crontrol для диагностики). Если WP-Cron отключен, используйте реальный cron-задачу сервера.
  • Удаляются нужные вариации: удостоверьтесь, что условие post_status != 'publish' корректно для вашего магазина. Возможно, нужно добавить фильтрацию по метаданным или вручную проверять привязку к товару.
  • Ошибка прав доступа: убедитесь, что функция вызывается с нужными правами (например, из контекста администратора).

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

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

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

МетодПлюсыМинусы
Ручное удаление через админкуПростота, контрольЗатратно по времени, ошибка человека
SQL-запросыБыстро, гибкоРиск, если неаккуратно
Автоматизация через WP-Cron и PHPАвтоматически, без участияНужна настройка и тестирование

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

⭐⭐⭐⭐⭐
Как отключить архив авторов в WordPress без потери SEO и дублей
16.08.2026
Как отключить emoji в WordPress через код и плагин
20.08.2026
Как закрыть страницы поиска WordPress от индексации без поломки сайта
24.08.2026
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше