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

Что такое коллекция атрибутов в WooCommerce и зачем она нужна

Коллекция атрибутов — это набор характеристик, которые можно назначить товарам для удобства фильтрации, поиска и управления. Обычно WooCommerce позволяет добавлять атрибуты по отдельности через админку, но если нужно создать группу атрибутов для определённой категории товаров — стандартных инструментов не хватает. В этой статье разберём, как программно создать и назначить коллекцию атрибутов, чтобы упростить работу с товарами без установки дополнительных плагинов.

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

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

  • сложному управлению;
  • повышенному риску ошибок;
  • ограничениям при выводе фильтров и сортировок.

Если вы хотите массово добавить один и тот же набор атрибутов к группе товаров, стандартный интерфейс не подходит — приходится вручную редактировать каждый товар или использовать сторонние плагины.

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

1. Создаём набор атрибутов через код

Добавьте следующий код в файл functions.php вашей темы или в отдельный плагин:

function wphost_create_product_attributes_collection() {
    $attributes = [
        'material' => 'Материал',
        'color' => 'Цвет',
        'size' => 'Размер'
    ];

    foreach ( $attributes as $slug => $name ) {
        if ( ! taxonomy_exists( 'pa_' . $slug ) ) {
            $args = array(
                'slug' => $slug,
                'name' => $name,
                'type' => 'select',
                'order_by' => 'menu_order',
                'has_archives' => false,
            );
            wc_create_attribute( $args );

            // Регистрируем таксономию для атрибута
            register_taxonomy(
                'pa_' . $slug,
                array('product'),
                array(
                    'labels' => array('name' => $name),
                    'hierarchical' => true,
                    'show_ui' => false,
                    'query_var' => true,
                    'rewrite' => false,
                )
            );
        }
    }
}
add_action( 'init', 'wphost_create_product_attributes_collection', 20 );

Этот код создаёт три атрибута: материал, цвет, размер. Они будут доступны в админке WooCommerce в разделе Атрибуты.

2. Добавляем термины к атрибутам

Атрибуты без терминов бесполезны — нужно добавить значения. Сделаем это тоже через код:

function wphost_add_terms_to_attributes() {
    $terms = [
        'pa_material' => ['Хлопок', 'Полиэстер', 'Шерсть'],
        'pa_color' => ['Красный', 'Синий', 'Зелёный'],
        'pa_size' => ['S', 'M', 'L', 'XL'],
    ];

    foreach ( $terms as $taxonomy => $term_names ) {
        foreach ( $term_names as $term_name ) {
            if ( ! term_exists( $term_name, $taxonomy ) ) {
                wp_insert_term( $term_name, $taxonomy );
            }
        }
    }
}
add_action( 'init', 'wphost_add_terms_to_attributes', 25 );

3. Массово назначаем коллекцию атрибутов товарам из категории

Если нужно добавить эту коллекцию атрибутов всем товарам из определённой категории, используйте следующий код:

function wphost_assign_attributes_to_products() {
    $category_slug = 'odezhda'; // замените на вашу категорию
    $args = array(
        'post_type' => 'product',
        'posts_per_page' => -1,
        'tax_query' => array(
            array(
                'taxonomy' => 'product_cat',
                'field' => 'slug',
                'terms' => $category_slug,
            ),
        ),
    );
    $products = get_posts( $args );

    foreach ( $products as $product_post ) {
        $product = wc_get_product( $product_post->ID );

        $attributes = $product->get_attributes();

        $new_attributes = array(
            'pa_material' => array('Хлопок'),
            'pa_color' => array('Красный'),
            'pa_size' => array('M'),
        );

        foreach ( $new_attributes as $taxonomy => $terms ) {
            $taxonomy_object = get_taxonomy( $taxonomy );
            if ( ! $taxonomy_object ) continue;

            $term_ids = array();
            foreach ( $terms as $term_name ) {
                $term = get_term_by( 'name', $term_name, $taxonomy );
                if ( $term ) {
                    $term_ids[] = intval($term->term_id);
                }
            }

            if ( ! empty( $term_ids ) ) {
                wp_set_object_terms( $product->get_id(), $term_ids, $taxonomy, true );

                // Обновляем данные атрибута для продукта
                $attribute = new WC_Product_Attribute();
                $attribute->set_id( wc_attribute_taxonomy_id_by_name( str_replace('pa_', '', $taxonomy) ) );
                $attribute->set_name( $taxonomy );
                $attribute->set_options( $term_ids );
                $attribute->set_position(0);
                $attribute->set_visible(true);
                $attribute->set_variation(false);

                $attributes[ $taxonomy ] = $attribute;
            }
        }

        $product->set_attributes( $attributes );
        $product->save();
    }
}
add_action( 'init', 'wphost_assign_attributes_to_products', 30 );

В этом примере всем товарам из категории с ярлыком odezhda добавляются выбранные термины атрибутов. Можно изменить значения и категорию под свои нужды.

Как проверить, что коллекция атрибутов добавлена и назначена правильно

  • Перейдите в WooCommerce > Продукты > Атрибуты — должны появиться новые атрибуты с терминами.
  • Откройте любой товар из заданной категории — в разделе атрибутов товара должны быть указанные значения.
  • Проверьте на фронтенде: в карточке товара отобразятся новые характеристики (если тема поддерживает их отображение).
  • В админке фильтрации товаров и в виджетах фильтров можно проверить работу атрибутов как фильтров.

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

  • Атрибуты не появляются в админке: убедитесь, что функция wc_create_attribute() вызывается после инициализации WooCommerce (например, на хуке init с приоритетом 20 или выше).
  • Термины не добавляются: проверьте корректность таксономий — атрибуты должны иметь префикс pa_.
  • Атрибуты не отображаются на товарах: после изменения атрибутов вызовите метод $product->save() для сохранения изменений.
  • Массовое назначение работает медленно: при большом количестве товаров используйте WP-CLI или разбивайте задания на части, чтобы избежать таймаутов.

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

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

Сравнение подходов: плагин vs собственный код

КритерийПлагинСобственный кодКомпромисс
ГибкостьОграничена функционалом плагинаВысокая — можно сделать под любые требованияТребует знаний PHP и WooCommerce API
ПроизводительностьМожет быть избыточным из-за общего кодаОптимизирован под конкретную задачуНеобходимо тестировать и оптимизировать
Поддержка и обновленияОбновления и багфиксы от разработчиковСамостоятельная поддержкаПодходит для небольших и уникальных задач
Риск конфликтовПлагин может конфликтовать с другимиМеньше рисков при правильном кодеКод должен быть чистым и проверенным
Как удалить или изменить поля в форме оплаты WooCommerce без плагинов
17.06.2026
Как удалить временные файлы кеша WooCommerce без плагинов
13.06.2026
Как сделать отзывы с фотографиями в WordPress
11.04.2026
Как удалить неиспользуемые метаданные в WordPress для оптимизации сайта
10.01.2026
Как использовать Redis для ускорения WordPress: настройка и примеры
10.03.2026