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

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

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

Чтобы проверить наличие неактивных вариаций, можно выполнить SQL-запрос напрямую в базе данных (например, через phpMyAdmin):

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

Здесь post_status = 'draft' или post_status = 'private' могут указывать на неактивные вариации. Статус publish — активные вариации.

Также стоит проверить, нет ли вариаций, у которых нет атрибутов, что тоже может означать, что они не используются.

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

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

Добавим в файл functions.php вашей темы или в отдельный плагин следующий код. Он будет искать неактивные вариации (через post_status) и удалять их.

function wpcore_delete_inactive_product_variations() {
    // Получаем неактивные вариации: статус draft или private
    $args = array(
        'post_type'      => 'product_variation',
        'post_status'    => array('draft', 'private'),
        'posts_per_page' => -1,
        'fields'         => 'ids',
    );
    $variations = get_posts($args);

    if (empty($variations)) {
        return 'No inactive variations found.';
    }

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

    return count($variations) . ' inactive variations deleted.';
}

2. Запуск функции по Cron или вручную

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

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

add_action('wpcore_cleanup_inactive_variations', 'wpcore_delete_inactive_product_variations');

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

echo wpcore_delete_inactive_product_variations();

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

  • Повторите SQL-запрос из раздела диагностики — неактивных вариаций не должно остаться.
  • Проверьте админку WooCommerce: в списке вариаций не должно быть черновиков и приватных.
  • Убедитесь, что сайт и страница товара работают корректно, без ошибок.
  • Для проверки Cron можно посмотреть логи или воспользоваться плагином WP Crontrol.

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

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

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

  • Перед удалением делайте бэкап базы данных.
  • Запускайте удаление в периоды низкой нагрузки сайта.
  • Если вариаций очень много, ограничьте количество удаляемых за один запуск, например, добавьте posts_per_page => 100 и используйте пагинацию.
  • Используйте WP-CLI для быстрого запуска и контроля выполнения.
  • Для дополнительной безопасности можно записывать удалённые ID вариаций в лог-файл.

Сравнение вариантов решения задачи

ВариантПреимуществаНедостаткиКогда использовать
Код на PHP с WP-Cron Полный контроль, без сторонних плагинов, гибкость
Можно настроить под свои нужды
Нужны навыки разработки, потенциальный риск при ошибках Средние и крупные магазины с разработчиками под рукой
Плагины очистки WooCommerce Простота использования, готовые интерфейсы Зависимость от сторонних решений, могут быть платными, возможны конфликты Малые магазины, где нет разработчиков
Ручное удаление через админку Безопасно, без кода Трудозатратно, не подходит для большого количества вариаций Малые магазины с редкими случаями
Как добавить владельца постов в WordPress с помощью кода
09.03.2026
Автоматическое изменение метаданных постов в WordPress
24.12.2025
Как удалить заблокированные пользователи WordPress
18.02.2026
Отзывы с автотрансляцией на сайт WordPress: практическое руководство
12.04.2026
WooCommerce: автоматическое удаление неактивных вариаций товаров
31.05.2026