WooCommerce: автоматическое создание вариаций товаров на основе атрибутов

В чем проблема: ручное создание вариаций в WooCommerce отнимает много времени

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

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

  • Товар имеет 2 и более атрибутов с несколькими значениями.
  • Общее число вариаций превышает 10, что затрудняет их ручное создание.
  • В WooCommerce нет вариаций, хотя атрибуты уже добавлены к товару.
  • Вам регулярно нужно обновлять или добавлять новые вариации в большом количестве товаров.

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

В данном примере предположим, что у вас есть переменный товар с ID $product_id. Атрибуты уже добавлены и назначены этому товару. Скрипт создаст все возможные комбинации вариаций.

1. Получение объекта товара и атрибутов

use Automattic\WooCommerce\Internal\ProductVariations\CRUD\ProductVariationCRUD; // при необходимости, зависит от версии WooCommerce

$product = wc_get_product($product_id);
if (!$product || 'variable' !== $product->get_type()) {
    return; // товар не переменный
}
$attributes = $product->get_attributes();

2. Формирование массива всех значений атрибутов

$attribute_values = [];
foreach ($attributes as $attribute_name => $attribute) {
    if ($attribute->get_variation()) { // только вариативные атрибуты
        $options = $attribute->get_options();
        if (!empty($options)) {
            $attribute_values[$attribute_name] = $options;
        }
    }
}

3. Функция для генерации всех комбинаций атрибутов

function array_cartesian_product(array $arrays) {
    $result = [[]];
    foreach ($arrays as $property => $property_values) {
        $tmp = [];
        foreach ($result as $result_item) {
            foreach ($property_values as $property_value) {
                $tmp[] = array_merge($result_item, [$property => $property_value]);
            }
        }
        $result = $tmp;
    }
    return $result;
}

$variations = array_cartesian_product($attribute_values);

4. Создание вариаций в WooCommerce

foreach ($variations as $variation_attributes) {
    $variation_post = [
        'post_title'  => $product->get_name(),
        'post_name'   => 'product-' . $product_id . '-variation',
        'post_status' => 'publish',
        'post_parent' => $product_id,
        'post_type'   => 'product_variation',
        'guid'        => $product->get_permalink(),
    ];
    $variation_id = wp_insert_post($variation_post);
    if (is_wp_error($variation_id)) {
        continue; // ошибка создания вариации
    }
    $variation = wc_get_product($variation_id);
    foreach ($variation_attributes as $attr_name => $attr_value) {
        $taxonomy = 'pa_' . $attr_name;
        wp_set_post_terms($variation_id, $attr_value, $taxonomy);
        $variation->set_attributes([$attr_name => $attr_value]);
    }
    // Можно задать цену, артикул и другие параметры вариации
    $variation->set_regular_price('1000'); // пример цены
    $variation->save();
}

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

  • В админке WooCommerce откройте редактирование товара, вкладка «Вариации» — должны появиться все комбинации.
  • На фронтенде товара можно выбрать все комбинации атрибутов без ошибки.
  • Если вариации не появились, проверьте логи ошибок сервера и wp_debug.

Частые ошибки при автоматическом создании вариаций и их решение

  • Вариации не отображаются: убедитесь, что атрибуты помечены как «Использовать для вариаций» и у товара тип «variable».
  • Ошибка wp_insert_post или пустой ID вариации: проверьте права пользователя и лимит памяти PHP.
  • Неверные значения атрибутов: значения должны совпадать с зарегистрированными терминами таксономии pa_*.
  • Скрипт долго выполняется: при большом числе вариаций разбейте генерацию на несколько частей и используйте WP Cron или командную строку.

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

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

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

МетодПреимуществаНедостатки
Код (самописный скрипт)Полный контроль, можно интегрировать в процессы, нет лишнего ПОТребует навыков, риск ошибок, нужно поддерживать
Плагины (например, WooCommerce Bulk Variations)Удобный интерфейс, поддержка, быстрое внедрениеМожет быть платным, ограниченная кастомизация, нагрузка
Как создать динамическую регистрацию пользователей в WordPress с проверкой и защитой
23.03.2026
Как создать собственный кustomный виджет в WordPress: пошаговое руководство
26.11.2025
Оптимизация базы данных WordPress: ударное решение для ускорения сайта
04.01.2026
Как установить лимит на количество регистраций в WordPress
12.02.2026
WooCommerce: как автоматически обновлять цену товара по расписанию
25.04.2026