Удаление всех вариаций товара в WooCommerce через код

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

В WooCommerce вариации создаются как отдельные дочерние продукты с типом product_variation, привязанные к родительскому товару (variable product). Иногда нужно массово удалить все вариации конкретного товара, например, при смене ассортимента, миграции данных или исправлении ошибок с вариациями.

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

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

Основная идея — получить ID всех вариаций родительского товара и удалить их через стандартную функцию WordPress wp_delete_post с параметром true для полного удаления без перемещения в корзину.

Пример функции:

function wc_delete_all_product_variations( $product_id ) {
    if ( ! $product_id ) {
        return new WP_Error( 'no_product_id', 'Не указан ID товара' );
    }

    $product = wc_get_product( $product_id );
    if ( ! $product || 'variable' !== $product->get_type() ) {
        return new WP_Error( 'invalid_product', 'Товар не является переменным' );
    }

    $variation_ids = $product->get_children();
    if ( empty( $variation_ids ) ) {
        return 'Вариации отсутствуют';
    }

    foreach( $variation_ids as $variation_id ) {
        wp_delete_post( $variation_id, true );
    }

    return 'Все вариации удалены';
}

Использование в коде (например, в функции темы, плагине или через WP-CLI):

$result = wc_delete_all_product_variations( 123 ); // 123 — ID товара
if ( is_wp_error( $result ) ) {
    error_log( $result->get_error_message() );
} else {
    error_log( $result );
}

Почему важно использовать wp_delete_post с параметром true

Параметр true гарантирует полное удаление поста из базы, без попадания в корзину WordPress. Это нужно для предотвращения накопления мусора и корректного удаления связанной метаинформации и атрибутов вариаций.

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

Чтобы убедиться, что вариации удалены:

  • Откройте редактирование родительского товара в админке WooCommerce — список вариаций должен быть пуст.
  • Выполните SQL-запрос напрямую к базе (через phpMyAdmin или WP-CLI):
SELECT ID FROM wp_posts WHERE post_parent = 123 AND post_type = 'product_variation';

Если запрос не возвращает результатов, значит вариации удалены.

  • Проверьте, что на сайте нет ошибок, связанных с отсутствием вариаций.

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

  • Ошибка: функция не удаляет вариации
    Проверьте, что передаёте ID именно переменного товара. Для простых товаров вариаций нет, и функция вернёт ошибку.
  • Ошибка: после удаления вариаций товар отображается с некорректными опциями
    Очистите кэш WooCommerce и объектный кэш сайта. Иногда кешированные данные мешают обновлению.
  • Ошибка: удалённые вариации всё ещё видны в фронтенде
    Проверьте, не используется ли сторонний плагин или кэш, который хранит старые данные. Принудительно сбросьте кэш плагинов и CDN.
  • Ошибка: удаление не происходит из-за прав доступа
    Убедитесь, что код выполняется с достаточными правами (например, от администратора). Если используете wp-cli, запускайте от имени пользователя с нужными правами.

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

  • Перед массовым удалением сделайте резервную копию базы данных.
  • Если вариаций очень много (>500), разбивайте удаление на батчи, чтобы избежать таймаутов.
  • Используйте транзакции базы данных (если есть возможность) или проверяйте состояние после каждого удаления.
  • Включите логирование ошибок для отслеживания возможных проблем.
  • Не запускайте код удаления на публичных страницах — только из административной части или через WP-CLI.

Сравнение решений: плагин vs код vs SQL-запрос

МетодПлюсыМинусыКогда использовать
Плагин (например, Bulk Variations Manager)Удобный интерфейс, нет необходимости в кодеМожет быть тяжелым, не всегда поддерживает массовое удалениеДля пользователей без навыков программирования
Программное удаление через PHP (как в статье)Полный контроль, можно интегрировать в процессы, быстро, безопасноТребует навыков программированияДля разработчиков и автоматизации
Удаление через SQL-запросСамый быстрый способ, без нагрузки на PHPРиск повредить данные, можно удалить не все связанные метаДля опытных администраторов при экстренной необходимости
Как использовать хук pre_get_posts для фильтрации записей в WordPress
30.04.2026
Как автоматически отключать плагины в WordPress по расписанию
13.01.2026
Как создать адаптивный слайдер в WordPress с нуля
22.11.2025
Как быстро использовать атрибуты WooCommerce для фильтрации и вывода товаров
03.05.2026
WooCommerce: автоматическое изменение стоимости товара при применении купона
30.06.2026