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

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

Пустые вариации товаров — вариации без атрибутов или с нулевым запасом — часто появляются после массового импорта, удаления атрибутов или некорректных ручных изменений. Они не видны клиенту, но занимают место в базе, влияют на отчёты и замедляют работу админки.

Как определить, есть ли такие вариации? В админке WooCommerce перейдите в раздел Товары > Все товары, отфильтруйте товары с вариациями и проверьте наличие вариаций с пустыми атрибутами или нулевыми запасами. Для точной диагностики используйте SQL-запрос:

SELECT p.ID, p.post_parent FROM wp_posts p
JOIN wp_postmeta pm ON p.ID = pm.post_id
WHERE p.post_type = 'product_variation'
AND (pm.meta_key LIKE 'attribute_%' AND (pm.meta_value IS NULL OR pm.meta_value = ''))
OR (pm.meta_key = '_stock' AND pm.meta_value = '0');

Если запрос возвращает записи — проблема есть.

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

Для автоматизации удаления пустых вариаций используйте следующий PHP-код. Он проверяет вариации с пустыми атрибутами и нулевым запасом и удаляет их программно.

function wpbook_delete_empty_variations() {
    $args = [
        'post_type' => 'product_variation',
        'posts_per_page' => -1,
        'post_status' => 'publish',
    ];

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

    foreach ($variations as $variation) {
        $variation_id = $variation->ID;
        $attributes = wc_get_product_variation_attributes($variation_id);
        $stock = get_post_meta($variation_id, '_stock', true);

        // Проверяем пустые атрибуты
        $empty_attributes = true;
        foreach ($attributes as $attr_value) {
            if (!empty($attr_value)) {
                $empty_attributes = false;
                break;
            }
        }

        // Удаляем вариацию если атрибуты пустые или запас 0
        if ($empty_attributes || $stock === '0' || $stock === 0) {
            wp_delete_post($variation_id, true);
            $deleted++;
        }
    }

    return $deleted;
}

// Запуск функции и вывод результата
add_action('admin_init', function() {
    if (current_user_can('manage_woocommerce') && isset($_GET['delete_empty_variations'])) {
        $count = wpbook_delete_empty_variations();
        wp_redirect(admin_url('edit.php?post_type=product&deleted_variations=' . $count));
        exit;
    }
});

Добавьте этот код в файл functions.php вашей активной темы или в кастомный плагин. Для запуска перейдите в админке по адресу https://ваш-сайт/wp-admin/edit.php?post_type=product&delete_empty_variations=1.

Как работает скрипт

  • Получает все вариации товаров.
  • Проверяет, есть ли у вариаций пустые атрибуты или запас равен нулю.
  • Удаляет такие вариации принудительно (без корзины).

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

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

Для контрольной проверки выполните SQL-запрос из раздела диагностики — он должен вернуть пустой результат.

Также проверьте, что отчёты WooCommerce обновлены и нет ошибок в админке.

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

  • Скрипт не удаляет вариации: Проверьте, что у пользователя есть права manage_woocommerce и что URL содержит параметр delete_empty_variations=1.
  • Удаляются не те вариации: Убедитесь, что проверка атрибутов и запаса корректно реализована — пустые строки и null считаются пустыми.
  • Появились ошибки при удалении: Проверьте, что нет ограничений на уровне базы данных или плагинов по безопасности, запрещающих удаление постов.

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

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

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

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

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

⭐⭐⭐⭐⭐
Как удалить пустые вариации товаров WooCommerce: практическое руководство
25.06.2026
Как решить проблему переопределения функций в теме WordPress
18.05.2026
Как успешно решить проблему не работающих AJAX-запросов в WooCommerce
19.06.2026
Как использовать хуки для автоматического изменения стоимости товара в WooCommerce
09.05.2026
Как создать автоматический импорт постов из внешнего источника в WordPress
26.01.2026
×
WordPress - сейчас выгоднее всего!

Скидка -20% на премиум темы и плагины

Возьми скидку сейчас