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

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

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

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

1. Создание атрибута продукта в WooCommerce

Для начала нужно проверить, существует ли атрибут, и если нет — создать его программно через функцию wc_create_attribute(). Атрибуты хранятся в таксономии pa_{slug}.

function create_product_attribute_if_not_exists( $name, $slug ) {
    $attributes = wc_get_attribute_taxonomies();
    foreach ( $attributes as $attribute ) {
        if ( $attribute->attribute_name === $slug ) {
            return $attribute->attribute_id; // Атрибут уже есть
        }
    }

    $args = array(
        'attribute_label'   => $name,
        'attribute_name'    => $slug,
        'attribute_type'    => 'select',
        'attribute_orderby' => 'menu_order',
        'attribute_public'  => 1,
    );

    return wc_create_attribute( $args );
}

2. Добавление терминов (значений) к атрибуту

После создания атрибута нужно добавить термины, которые будут вариантами выбора. Термины создаются как обычные таксономии WordPress, но с префиксом pa_.

function add_terms_to_attribute( $attribute_slug, $terms = array() ) {
    $taxonomy = 'pa_' . $attribute_slug;

    if ( ! taxonomy_exists( $taxonomy ) ) {
        return false; // Атрибут не существует
    }

    foreach ( $terms as $term_name ) {
        if ( ! term_exists( $term_name, $taxonomy ) ) {
            wp_insert_term( $term_name, $taxonomy );
        }
    }

    return true;
}

3. Привязка атрибутов к товару и создание вариантов

Далее нужно назначить атрибуты товару и создать вариации. Для вариативного товара атрибуты сохраняются в мета-данных, а вариации — дочерние записи типа product_variation.

function create_variable_product_with_variations( $product_name, $attribute_slug, $terms ) {
    // Создаем вариативный товар
    $product = new WC_Product_Variable();
    $product->set_name( $product_name );
    $product->save();
    $product_id = $product->get_id();

    // Привязываем атрибут к товару
    $taxonomy = 'pa_' . $attribute_slug;
    $product_attributes = array();

    $product_attributes[ $taxonomy ] = array(
        'name'         => $taxonomy,
        'value'        => implode( ' | ', $terms ),
        'position'     => 0,
        'is_visible'   => 1,
        'is_variation' => 1,
        'is_taxonomy'  => 1,
    );

    update_post_meta( $product_id, '_product_attributes', $product_attributes );

    // Создаем вариации
    foreach ( $terms as $term_name ) {
        $variation = new WC_Product_Variation();
        $variation->set_parent_id( $product_id );
        $variation->set_attributes( array( $attribute_slug => sanitize_title( $term_name ) ) );
        $variation->set_regular_price( 100 ); // пример цены
        $variation->save();
    }

    return $product_id;
}

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

  • Зайдите в админку WooCommerce, откройте список товаров и найдите созданный вариативный товар.
  • Проверьте вкладку "Атрибуты" — атрибут должен быть добавлен с нужными значениями.
  • Вкладка "Вариации" должна содержать созданные варианты с ценами.
  • На фронтенде товара убедитесь, что выпадающий список вариантов корректно отображается и можно выбрать разные варианты.

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

  • Атрибут не появляется в списке после создания: Проверьте, что вызов wc_create_attribute() успешно возвращает ID и что таксономия pa_{slug} зарегистрирована.
  • Вариации не создаются или не видны: Убедитесь, что в мета атрибута у товара выставлен флаг 'is_variation' => 1 и что вариации имеют правильные атрибуты с sanitize_title терминами.
  • Ошибка при добавлении термина: Проверьте, что таксономия существует (атрибут создан) перед добавлением термина.

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

  • Используйте проверку существования атрибутов и терминов перед созданием, чтобы избежать дублирования и ошибок.
  • Обрабатывайте операции добавления атрибутов и вариаций в пакетном режиме, чтобы не перегружать сервер.
  • Кэшируйте результаты запросов к базе, если планируете массовые операции с товарами.
  • Обязательно создавайте резервные копии базы перед массовыми изменениями.

Сравнение способов автоматизации создания вариаций

СпособПреимуществаНедостаткиПример использования
Ручное создание в админке Простота, визуальный контроль Трудозатратно, не подходит для массового импорта Редактирование каждого товара вручную
Импорт CSV с атрибутами и вариациями Автоматизация массовых данных Нужны сторонние плагины (например, WP All Import) Импорт через WP All Import с настройкой шаблонов
Программное создание через PHP (код) Гибкость, интеграция с API и внешними сервисами Требует знаний PHP и WooCommerce API Приведенный в статье код
Как создать динамический вывод постов в WordPress
29.11.2025
WooCommerce: автоматическое изменение стоимости товаров по акции с учётом вариантов
02.06.2026
Кастомизация переходов между страницами в WordPress без перезагрузки
04.01.2026
Как сделать уникальный meta description в WordPress автоматически
02.02.2026
Как создать уникальные ссылки для автоматического редиректа в WordPress
19.02.2026