wpcat.ru wordpress WPCat.ru

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

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

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

Для диагностики перейдите в админке WooCommerce в раздел Товары > Вариации конкретного вариативного товара и проверьте, есть ли варианты с пустыми полями цены или отсутствующим запасом (stock).

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

function check_empty_variations( $product_id ) {
    $product = wc_get_product( $product_id );
    if ( ! $product || 'variable' !== $product->get_type() ) {
        return [];
    }
    $empty_variations = [];
    foreach ( $product->get_children() as $variation_id ) {
        $variation = wc_get_product( $variation_id );
        if ( ! $variation->get_price() || ! $variation->is_in_stock() ) {
            $empty_variations[] = $variation_id;
        }
    }
    return $empty_variations;
}

Вызов функции check_empty_variations($product_id) вернёт массив идентификаторов пустых вариантов.

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

Чтобы автоматически удалить пустые варианты из вариативных товаров, добавьте следующий код в файл functions.php вашей темы или в кастомный плагин:

function remove_empty_variations_from_product( $product_id ) {
    $product = wc_get_product( $product_id );
    if ( ! $product || 'variable' !== $product->get_type() ) {
        return;
    }
    $variations_to_remove = [];
    foreach ( $product->get_children() as $variation_id ) {
        $variation = wc_get_product( $variation_id );
        if ( ! $variation->get_price() || ! $variation->is_in_stock() ) {
            $variations_to_remove[] = $variation_id;
        }
    }
    if ( ! empty( $variations_to_remove ) ) {
        foreach ( $variations_to_remove as $vid ) {
            wp_delete_post( $vid, true );
        }
    }
}

Для массового удаления пустых вариантов всех товаров можно вызвать функцию так:

$args = [
    'post_type'      => 'product',
    'posts_per_page' => -1,
    'fields'         => 'ids',
];
$products = get_posts( $args );
foreach ( $products as $product_id ) {
    remove_empty_variations_from_product( $product_id );
}

Автоматизация удаления при сохранении товара

Чтобы не запускать скрипт вручную, добавьте хук на сохранение товара:

add_action( 'save_post_product', 'remove_empty_variations_on_save', 20, 3 );
function remove_empty_variations_on_save( $post_ID, $post, $update ) {
    remove_empty_variations_from_product( $post_ID );
}

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

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

Также можно повторно вызвать функцию check_empty_variations($product_id) — она должна вернуть пустой массив.

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

  • Не удаляются вариации: убедитесь, что функция вызывается с правильным ID товара и что у пользователя есть права на удаление.
  • Удаление важных вариантов: проверьте условия удаления — например, удалять только варианты с get_price() == false и !is_in_stock(). Если цена или запас есть, вариант не удалится.
  • Потеря данных: перед массовым удалением сделайте резервную копию базы данных.
  • Ошибка при массовом удалении: для большого количества товаров используйте WP-CLI или разбивайте процесс на части, чтобы избежать таймаута.

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

  • Удаление вариантов — операция необратимая, используйте wp_delete_post( $vid, true ) для полного удаления с базы, но убедитесь, что резервная копия есть.
  • Не запускайте массовое удаление на продакшн-сайте без тестирования на тестовой копии.
  • Оптимизируйте запросы: при большом количестве товаров используйте постраничную выборку и WP Cron для поэтапного удаления.
  • Добавьте логирование удалённых вариантов для аудита безопасности.

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

МетодПлюсыМинусы
Удаление вручную через админкуПростота, визуальный контрольТрудоёмко при большом каталоге
Код в functions.php с вызовом по кнопкеАвтоматизация, контроль через кодТребует базовых знаний PHP
Автоматическое удаление при сохраненииПолная автоматизацияРиск удаления важного варианта без проверки
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее