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

Почему важно программно добавлять атрибуты и свойства товара в WooCommerce

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

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

  • Атрибут создан, но не отображается на странице товара.
  • Атрибут есть в базе, но вариации не создаются.
  • Атрибуты не добавляются при импорте через скрипт.
  • Ошибки в консоли или логи PHP при попытке программного добавления.

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

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

1. Создание глобального атрибута (taxonomy)

Глобальные атрибуты хранятся как таксономии pa_{slug}. Для создания атрибута используйте функцию wc_create_attribute():

$attribute = array(
    'name' => 'Цвет',
    'slug' => 'color',
    'type' => 'select',
    'order_by' => 'menu_order',
    'has_archives' => false,
);

$attribute_id = wc_create_attribute( $attribute );
if ( is_wp_error( $attribute_id ) ) {
    error_log('Ошибка создания атрибута: ' . $attribute_id->get_error_message());
} else {
    // Зарегистрируем таксономию атрибута
    register_taxonomy(
        'pa_color',
        apply_filters('woocommerce_taxonomy_objects_pa_color', array('product')),
        apply_filters('woocommerce_taxonomy_args_pa_color', array(
            'labels' => array(
                'name' => 'Цвет',
            ),
            'hierarchical' => true,
            'show_ui' => false,
            'query_var' => true,
            'rewrite' => false,
        ))
    );
}

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

wp_insert_term('Красный', 'pa_color');
wp_insert_term('Синий', 'pa_color');
wp_insert_term('Зеленый', 'pa_color');

2. Присвоение атрибута товару

Для назначения атрибута товару используйте следующий код:

$product_id = 123; // ID товара

// Получаем объект товара
$product = wc_get_product( $product_id );

// Создаем массив атрибутов для товара
$attributes = array();

// Получаем все термины атрибута 'pa_color'
$terms = wp_get_object_terms( $product_id, 'pa_color', array('fields' => 'slugs') );

// Если терминов нет, добавим нужный
if ( empty($terms) ) {
    wp_set_object_terms( $product_id, array('красный'), 'pa_color' );
    $terms = array('красный');
}

// Создаем объект атрибута
$attribute = new WC_Product_Attribute();
$attribute->set_id( wc_attribute_taxonomy_id_by_name('pa_color') );
$attribute->set_name('pa_color');
$attribute->set_options( $terms );
$attribute->set_position( 0 );
$attribute->set_visible( true );
$attribute->set_variation( true );

$attributes['pa_color'] = $attribute;

// Устанавливаем атрибуты у товара
$product->set_attributes( $attributes );
$product->save();

3. Добавление пользовательских (локальных) атрибутов без таксономии

Если нужен атрибут только для одного товара, без создания глобальной таксономии:

$attribute = new WC_Product_Attribute();
$attribute->set_id( 0 ); // 0 для локального атрибута
$attribute->set_name( 'Материал' );
$attribute->set_options( array('Хлопок', 'Полиэстер') );
$attribute->set_position( 1 );
$attribute->set_visible( true );
$attribute->set_variation( false );

$attributes = $product->get_attributes();
$attributes[] = $attribute;

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

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

  • Откройте страницу редактирования товара в админке — атрибуты должны отображаться в соответствующем блоке.
  • На странице товара на сайте — должны быть видны выбранные атрибуты и, если включены вариации, селекторы для выбора вариаций.
  • Через консоль или WP CLI проверьте, что таксономия pa_color зарегистрирована и терминов достаточно: wp term list pa_color.
  • Ошибки в логах отсутствуют.

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

  • Атрибут не появляется на сайте: проверьте, что атрибут зарегистрирован как глобальный и добавлен в товар правильно. Без вызова register_taxonomy() таксономия не будет работать.
  • Термин не привязывается: убедитесь, что термин существует в таксономии; используйте wp_insert_term() для создания.
  • Атрибуты не сохраняются: проверьте, что вызван метод $product->save() после установки атрибутов.
  • Неверный slug атрибута: slug должен начинаться с pa_ при работе с глобальными атрибутами.

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

  • Не создавайте атрибуты и термины при каждом запросе — используйте проверку наличия перед созданием.
  • Для массового импорта товаров с атрибутами используйте WP CLI или отдельные скрипты, чтобы избежать таймаутов.
  • Добавляйте атрибуты только для нужных товаров, чтобы не перегружать базу данных.
  • При работе с пользовательскими атрибутами избегайте названий, совпадающих с существующими таксономиями WooCommerce.

Сравнение способов добавления атрибутов в WooCommerce

МетодПлюсыМинусыПрименение
Админка WooCommerceПростота, визуальный контрольМедленно при большом объеме, рутинноМалые объемы, единичные товары
Программное создание глобальных атрибутовАвтоматизация, масштабированиеСложнее отладка, требует знанийМассовое обновление, интеграции
Локальные атрибуты через кодБыстрая настройка для одного товараНе подходят для вариаций, не глобальныеУникальные свойства товара
WooCommerce: как добавить пользовательское поле в форму оплаты через хук
23.04.2026
WooCommerce: как автоматически удалять заказы со статусом «Отменен»
25.05.2026
WooCommerce: как автоматически удалять товар после отмены заказа
19.05.2026
Как создать автоматический импорт данных из Яндекс.Метрики в WordPress
27.02.2026
Как отключить автоматическое обновление плагинов в WordPress
08.12.2025