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

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

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

Как понять, что на вашем сайте есть неиспользуемые вариации?

  • Проверить таблицу wp_posts на наличие записей типа product_variation.
  • Сравнить количество вариаций с фактическим ассортиментом товаров в админке.
  • Использовать плагины для отчётов по товарным вариациям (например, WooCommerce Bulk Variations Manager).

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

1. Создание резервной копии

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

2. Определение критериев неиспользуемости вариаций

Чаще всего неиспользуемые вариации — это вариации, которые не связаны с активными родительскими товарами или имеют статус draft, trash или pending.

3. Использование WP-CLI для быстрого удаления

WP-CLI позволяет быстро выполнять массовые операции. Команда для удаления вариаций, у которых нет родительского товара или он не опубликован:

wp post delete $(wp post list --post_type=product_variation --format=ids --post_status=draft,trash,pending) --force

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

4. Кастомный PHP-скрипт для удаления вариаций без активного родителя

<?php
function delete_unused_product_variations() {
    $args = [
        'post_type'      => 'product_variation',
        'posts_per_page' => -1,
        'post_status'    => 'any',
    ];

    $variations = get_posts($args);
    $deleted_count = 0;

    foreach ($variations as $variation) {
        $parent_id = wp_get_post_parent_id($variation->ID);
        $parent = get_post($parent_id);

        if (!$parent || $parent->post_status !== 'publish') {
            wp_delete_post($variation->ID, true);
            $deleted_count++;
        }
    }
    return $deleted_count;
}

// Запуск функции и вывод результата
$deleted = delete_unused_product_variations();
echo "Удалено вариаций: " . $deleted;
?>

Этот код можно добавить в файл functions.php вашей темы или запустить через плагин Code Snippets.

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

  • Проверьте количество вариаций в базе через админку WooCommerce – число должно уменьшиться.
  • Используйте запрос к базе данных, чтобы убедиться, что не осталось вариаций без родителя:
SELECT * FROM wp_posts WHERE post_type = 'product_variation' AND post_parent NOT IN (SELECT ID FROM wp_posts WHERE post_type = 'product' AND post_status = 'publish');

Запрос должен вернуть пустой результат.

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

  • Удаление активных вариаций: Неправильное определение «неиспользуемых» может привести к удалению нужных вариаций. Проверьте статус родительских товаров и используйте фильтры статусов.
  • Ошибка памяти или таймаута при большом количестве вариаций: Разбейте удаление на части, например, обрабатывайте по 100 вариаций за раз с помощью параметра posts_per_page.
  • Отсутствие резервной копии: Всегда делайте бэкап перед массовыми операциями с базой.

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

  • Запускайте массовые операции во время низкой нагрузки на сайт.
  • Используйте WP-CLI, если есть доступ к серверу, для более быстрой обработки.
  • Ограничьте права доступа к скриптам, которые удаляют данные.
  • Регулярно оптимизируйте базу данных после удаления с помощью плагинов типа Clearfy Pro (https://wpshop.ru/plugins/clearfy).

Сравнение способов удаления неиспользуемых вариаций WooCommerce

МетодПлюсыМинусыПодходит для
WP-CLI командыБыстро, без нагрузки на сайтТребует доступа к серверу, ограниченные фильтрыСредние и крупные сайты с SSH доступом
Кастомный PHP-скриптГибкость, можно кастомизировать логикуНагрузка на сайт, возможны таймаутыМаленькие сайты, разработчики без доступа к SSH
Плагины очисткиУдобство, интерфейсМогут не поддерживать все случаи, платные функцииПользователи без навыков программирования

Чек-лист для автоматического удаления неиспользуемых вариаций в WooCommerce

  • Создать резервную копию базы данных.
  • Определить критерии «неиспользуемости» вариаций.
  • Выбрать способ удаления (WP-CLI, PHP-скрипт, плагин).
  • Запустить удаление на тестовом сайте или в безопасном режиме.
  • Проверить результаты через админку и запросы к базе.
  • Оптимизировать базу после удаления.
  • Настроить регулярные проверки и очистку при необходимости.
Автоматическое изменение стоимости товара в WooCommerce при изменении атрибутов
21.05.2026
Как создать успешный плагин для WordPress: практические советы и примеры кода
01.01.2026
Автоматический отчет по ошибкам WordPress с применением логов и уведомлений
30.03.2026
Автоматическое удаление старого контента в WordPress с помощью WP-Cron
15.04.2026
Как создать автозаполняемый формат даты в WordPress
11.12.2025