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

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

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

Как выявить пустые вариативные товары?

  • В админке WooCommerce перейдите в Товары → Все товары и отфильтруйте по типу "Вариативный товар".
  • Обратите внимание на товары без атрибутов, без цены или с нулевым запасом.
  • Для более точной диагностики используйте SQL-запрос:
SELECT p.ID, p.post_title FROM wp_posts p
LEFT JOIN wp_postmeta pm ON p.ID = pm.post_id AND pm.meta_key = '_price'
WHERE p.post_type = 'product_variation' AND (pm.meta_value IS NULL OR pm.meta_value = '' OR pm.meta_value = '0');

Этот запрос покажет вариации без цены — признак пустых товаров.

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

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

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

function wpguest_delete_empty_variations() {
    $args = array(
        'post_type'      => 'product_variation',
        'posts_per_page' => -1,
        'post_status'    => array('publish', 'private'),
        'fields'         => 'ids',
    );

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

    foreach ($variations as $variation_id) {
        $price = get_post_meta($variation_id, '_price', true);
        $stock = get_post_meta($variation_id, '_stock', true);
        $attributes = get_post_meta($variation_id, '_variation_description', true);

        // Условие удаления: нет цены или цена 0, и нет запасов
        if ((empty($price) || $price === '0') && (empty($stock) || $stock === '0')) {
            wp_delete_post($variation_id, true);
            $deleted_count++;
        }
    }

    return $deleted_count;
}

Вызывайте функцию вручную, например, через WP-CLI или временно из админки:

add_action('admin_init', function() {
    if (current_user_can('manage_woocommerce') && isset($_GET['wpguest_delete_empty_variations'])) {
        $deleted = wpguest_delete_empty_variations();
        echo '<div class="notice notice-success is-dismissible"><p>Удалено пустых вариаций: ' . $deleted . '</p></div>';
    }
});

Для запуска откройте в браузере https://ваш-сайт/wp-admin/?wpguest_delete_empty_variations=1.

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

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

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

  • Ошибка: удаляются нужные вариации. Проверьте условие в коде — возможно, стоит добавить дополнительные проверки, например, на наличие атрибутов, чтобы случайно не удалить рабочие вариации.
  • Функция не удаляет вариации. Убедитесь, что у пользователя есть права manage_woocommerce и что хук admin_init срабатывает. Проверьте логи ошибок PHP.
  • Проблемы с производительностью при большом количестве вариаций. Используйте WP-CLI для пакетной обработки или добавьте пагинацию в запросы.

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

  • Перед удалением сделайте резервную копию базы данных.
  • Тестируйте код сначала на локальном или staging-сервере.
  • Для больших магазинов используйте WP-CLI и делайте удаление партиями (например, по 100 вариаций за раз).
  • Добавьте логирование удалённых ID вариаций для аудита.
  • Если хотите упростить задачу, можно использовать плагин Clearfy Pro от WPShop для очистки базы и оптимизации WooCommerce — https://wpshop.ru/plugins/clearfy?utm_source=wpguest.ru&utm_medium=article&utm_campaign=kak-udalit-pustye-variativnye-tovary-woocommerce-s-pomoshhyu-koda

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

МетодПреимуществаНедостатки
Код в functions.phpПолный контроль, бесплатно, без плагиновТребует навыков, возможны ошибки при неправильном коде
WP-CLIБыстро для больших магазинов, не нагружает сайтТребуется доступ к серверу и знания консоли
Плагин Clearfy ProУпрощённый интерфейс, дополнительные функции оптимизацииПлатный, добавляет нагрузку на сайт