Как удалить пустые вариативные товары WooCommerce с помощью кода

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

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

Как проверить наличие пустых вариативных товаров

Для начала важно понять, какие товары являются пустыми вариативными:

  • В админке в разделе Товары фильтруйте по типу «Вариативный товар».
  • Откройте каждый и проверьте, есть ли активные вариации и их остатки.
  • Можно использовать SQL-запрос к базе данных для быстрого поиска товаров без вариаций или с нулевым запасом.
SELECT p.ID, p.post_title FROM wp_posts p WHERE p.post_type = 'product' AND p.ID NOT IN (SELECT post_parent FROM wp_posts WHERE post_type = 'product_variation');

Этот запрос покажет вариативные товары без дочерних вариаций.

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

Автоматизируем удаление таких товаров через кастомный PHP-скрипт, который можно добавить в functions.php темы или выполнить через WP-CLI.

function wpguest_delete_empty_variable_products() {
    $args = [
        'post_type' => 'product',
        'post_status' => 'publish',
        'posts_per_page' => -1,
        'tax_query' => [
            [
                'taxonomy' => 'product_type',
                'field' => 'slug',
                'terms' => 'variable',
            ],
        ],
    ];
    $query = new WP_Query($args);
    
    foreach ($query->posts as $product_post) {
        $product = wc_get_product($product_post->ID);
        $variations = $product->get_children();
        
        // Проверяем наличие вариаций
        if (empty($variations)) {
            wp_delete_post($product_post->ID, true);
            continue;
        }
        
        // Проверяем остаток всех вариаций
        $has_stock = false;
        foreach ($variations as $variation_id) {
            $variation = wc_get_product($variation_id);
            if ($variation && $variation->managing_stock() && $variation->get_stock_quantity() > 0) {
                $has_stock = true;
                break;
            }
        }
        
        if (!$has_stock) {
            wp_delete_post($product_post->ID, true);
        }
    }
}
// Запуск функции вручную или по крону
// wpguest_delete_empty_variable_products();

Этот код:

  • Получает все вариативные товары.
  • Удаляет товар, если у него нет вариаций.
  • Удаляет товар, если все вариации не имеют запасов.

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

  • Добавьте функцию в functions.php и вызовите её один раз через админку или запланируйте запуск через WP-Cron.
  • Для больших магазинов лучше использовать WP-CLI для выполнения без таймаута.

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

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

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

  • Удаляются нужные товары — проверьте логику условия удаления, возможно, у вариаций неверно настроено управление запасами.
  • Скрипт не работает — убедитесь, что функция вызывается и WooCommerce активен.
  • Ошибка таймаута на больших магазинах — используйте WP-CLI или делайте обработку порциями.

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

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

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

МетодПлюсыМинусыКогда использовать
Ручное удаление в админкеПросто, без кодаМедленно, не подходит для большого каталогаМалое количество товаров
SQL-запрос + ручное удалениеБыстрый поиск проблемных товаровТребует знаний SQL, риск удаления нужных данныхДля опытных разработчиков
PHP-скрипт для автоматического удаленияАвтоматизация, можно запускать регулярноНужно тестировать, требует базовых навыков программированияСредние и большие магазины
Плагины для очистки каталогаУдобство, GUIМожет нагружать сайт, лишние зависимостиПользователи без навыков кодирования
Как автоматизировать удаление неиспользуемых transient в WordPress
16.04.2026
Как использовать WPRemark для автоматического управления отзывами в WordPress
10.02.2026
Как автоматизировать удаление старого контента WooCommerce по дате
13.06.2026
Как решить проблему незагрузки изображений в WooCommerce
30.04.2026
Как удалить старые и неиспользуемые медиа файлы в WordPress
04.01.2026