Автоматическое создание вариантов товаров WooCommerce по атрибутам через код

Диагностика задачи: зачем автоматизировать создание вариаций в WooCommerce

Если у вас в магазине WooCommerce много товаров с вариациями (цвет, размер, материал и т.п.), создание вариаций вручную через админку становится рутинной и ошибкоопасной задачей. Автоматизация процесса позволяет создавать все возможные комбинации атрибутов программно, экономя время и исключая человеческий фактор.

Типичные признаки, что нужна автоматизация:

  • Множество товаров с одинаковыми наборами атрибутов;
  • Частое добавление новых атрибутов у товаров;
  • Необходимость массового обновления вариаций.

Как программно создавать вариации по атрибутам в WooCommerce

Основные шаги решения

Для автоматического создания вариаций нам нужно:

  1. Создать или получить товар типа variable;
  2. Определить и привязать к товару нужные атрибуты (термины таксономии pa_*);
  3. Сгенерировать все комбинации атрибутов и создать вариации;
  4. Сохранить вариации с нужными параметрами (цена, наличие и т.п.).

Пример кода для создания вариаций

Ниже пример функции, которая создает вариации для товара по заданным атрибутам:

function create_variations_for_product( $product_id, $attributes_terms ) {
    if ( ! class_exists( 'WC_Product_Variable' ) ) {
        return;
    }

    $product = wc_get_product( $product_id );
    if ( ! $product || 'variable' !== $product->get_type() ) {
        return;
    }

    // Устанавливаем атрибуты для товара
    $attributes_data = [];
    foreach ( $attributes_terms as $taxonomy => $terms ) {
        $attribute = new WC_Product_Attribute();
        $attribute->set_id( wc_attribute_taxonomy_id_by_name( $taxonomy ) );
        $attribute->set_name( $taxonomy );
        $attribute->set_options( $terms );
        $attribute->set_position( 0 );
        $attribute->set_visible( true );
        $attribute->set_variation( true );
        $attributes_data[] = $attribute;
    }

    $product->set_attributes( $attributes_data );
    $product->save();

    // Генерируем все комбинации атрибутов
    $combinations = array_shift($attributes_terms);
    foreach ( $attributes_terms as $terms ) {
        $new_combinations = [];
        foreach ( $combinations as $combination ) {
            foreach ( $terms as $term ) {
                $new_combinations[] = array_merge( (array) $combination, [ $term ] );
            }
        }
        $combinations = $new_combinations;
    }

    // Создаем вариации
    foreach ( $combinations as $combination ) {
        $variation = new WC_Product_Variation();
        $variation->set_parent_id( $product_id );

        $attributes_for_variation = [];
        $i = 0;
        foreach ( $attributes_terms as $taxonomy => $terms ) {
            $attributes_for_variation[ 'attribute_' . $taxonomy ] = $combination[$i];
            $i++;
        }
        $variation->set_attributes( $attributes_for_variation );

        // Пример установки цены и статуса
        $variation->set_regular_price( '100' );
        $variation->set_manage_stock( false );
        $variation->set_stock_status( 'instock' );

        $variation->save();
    }
}

Вызов функции (пример):

create_variations_for_product( 123, [
    'pa_color' => [ 'red', 'blue' ],
    'pa_size' => [ 'small', 'large' ]
] );

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

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

  • Перейдите в админку WooCommerce → Товары → откройте нужный товар;
  • Вкладка «Вариации» должна содержать все комбинации переданных атрибутов;
  • Проверьте, что вариации отображаются на странице товара на фронтенде с правильными атрибутами и ценой;
  • При необходимости, посмотрите в базе данных в таблицах wp_posts и wp_postmeta, что вариации имеют тип product_variation и корректные метаданные.

Частые ошибки и способы их исправления

  • Неверно указаны таксономии атрибутов: WooCommerce требует, чтобы атрибуты имели префикс pa_. Проверьте, что таксономии и термины существуют и зарегистрированы.
  • Не установлен тип товара variable: перед созданием вариаций убедитесь, что товар имеет тип variable. Если нет, смените тип программно или вручную.
  • Комбинации не создаются или пустые: Проверьте, что входные массивы атрибутов не пусты и содержат валидные термины.
  • Вариации не отображаются на фронтенде: Проверьте, опубликованы ли вариации, и у них установлена цена и статус instock.

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

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

Сравнение способов создания вариаций: код vs плагины

МетодПлюсыМинусыКогда использовать
Программный кодТочная настройка, автоматизация, масштабируемость, нет лишних плагиновТребует навыков разработки, возможные ошибки без тестовДля уникальных задач, интеграций, массовых обновлений
Плагины (например, WooCommerce Bulk Variations)Простота использования, готовый интерфейсМогут быть ресурсоемкими, ограничены функционаломМаленькие магазины, быстрая настройка
Как создать автоматический импорт продуктов в WordPress с помощью WP All Import
25.12.2025
Как создать автоматический импорт пользовательских данных в WordPress
02.03.2026
Автоматическое обновление остатка и цены товаров WooCommerce через Webhook с примером кода
25.04.2026
Как автоматически обновлять контент в WordPress с помощью AJAX и WP-Cron
02.01.2026
Как автоматически удалять старые записи в WordPress по дате
17.03.2026