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

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

В интернет-магазинах на WooCommerce часто возникает необходимость изменить атрибуты сразу у большого количества товаров. Например, обновить размер, цвет, добавить новый атрибут или изменить значение существующего. Делать это вручную через админку неудобно и долго, особенно если товаров сотни или тысячи.

Типичные ситуации:

  • Изменение значения атрибута для группы товаров по категории или тегу.
  • Добавление нового атрибута с фиксированным значением для всех товаров определённого типа.
  • Удаление старых атрибутов и замена их на новые.

Основные способы массового обновления атрибутов

Через админ-панель WooCommerce

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

Через плагины

Существуют плагины для массового редактирования атрибутов, например WP All Import, Bulk Edit Products и другие. Они удобны, но требуют установки, часто платные и добавляют нагрузку на сайт.

Через кастомный PHP-код

Оптимальный способ для разработчиков — написать скрипт или функцию, которая массово обновит атрибуты через WP/WC API. Это позволяет гибко контролировать изменения и автоматизировать процесс.

Пошаговое решение: массовое обновление атрибутов через PHP

1. Подготовка рабочей среды

Рекомендуется создать дочернюю тему или кастомный плагин для размещения кода. Для тестирования используйте staging-сервер или локальную копию сайта, чтобы избежать ошибок на живом магазине.

2. Получение товаров для обновления

Используем WP_Query для выборки нужных товаров. Например, все товары из категории "Футболки":

$args = [
    'post_type' => 'product',
    'posts_per_page' => -1,
    'tax_query' => [[
        'taxonomy' => 'product_cat',
        'field' => 'slug',
        'terms' => 'futbolki'
    ]]
];
$query = new WP_Query($args);

3. Подготовка данных атрибутов

Атрибуты в WooCommerce хранятся в метаданных поста и таксономиях. Для пользовательских атрибутов (non-global) они хранятся в массиве 'product_attributes' в мета '_product_attributes'. Для глобальных атрибутов — в таксономиях вида 'pa_color', 'pa_size'.

Пример добавления глобального атрибута "pa_brand" с термином "nike":

$attribute_slug = 'pa_brand';
$term_name = 'nike';

// Проверяем, существует ли термин
$term = get_term_by('name', $term_name, $attribute_slug);
if (!$term) {
    $term = wp_insert_term($term_name, $attribute_slug);
}
$term_id = is_wp_error($term) ? 0 : $term['term_id'];

4. Обновление атрибутов у каждого товара

Пример функции для добавления/обновления глобального атрибута у товара:

function update_product_attribute($product_id, $attribute_slug, $term_name) {
    $product = wc_get_product($product_id);
    if (!$product) return;

    $term = get_term_by('name', $term_name, $attribute_slug);
    if (!$term) {
        $term = wp_insert_term($term_name, $attribute_slug);
        if (is_wp_error($term)) return;
        $term_id = $term['term_id'];
    } else {
        $term_id = $term->term_id;
    }

    // Присваиваем термин атрибуту
    wp_set_object_terms($product_id, (int) $term_id, $attribute_slug, false);

    // Обновляем данные атрибутов в мета
    $attributes = $product->get_attributes();
    $attributes[$attribute_slug] = new WC_Product_Attribute();
    $attributes[$attribute_slug]->set_id(wc_attribute_taxonomy_id_by_name($attribute_slug));
    $attributes[$attribute_slug]->set_name($attribute_slug);
    $attributes[$attribute_slug]->set_options([$term_id]);
    $attributes[$attribute_slug]->set_position(0);
    $attributes[$attribute_slug]->set_visible(true);
    $attributes[$attribute_slug]->set_variation(false);

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

5. Запуск массового обновления

if ($query->have_posts()) {
    while ($query->have_posts()) {
        $query->the_post();
        $product_id = get_the_ID();

        update_product_attribute($product_id, 'pa_brand', 'nike');
    }
    wp_reset_postdata();
}

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

1. В админке WooCommerce откройте товар из выборки и проверьте, что атрибут отображается и значение установлено.

2. На фронтенде на странице товара проверьте блок с атрибутами — должен появиться новый атрибут.

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

$product = wc_get_product($product_id);
$attributes = $product->get_attributes();
var_dump($attributes);

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

  • Термин атрибута не создаётся: проверьте, что таксономия атрибута существует (глобальные атрибуты создаются через WooCommerce в разделе «Атрибуты»). Если таксономия отсутствует, термин создать не получится.
  • Атрибут не отображается на фронтенде: убедитесь, что атрибут установлен как видимый (set_visible(true)) и сохранён продукт методом save().
  • Функция wp_set_object_terms не срабатывает: проверьте правильность slug атрибута, он должен начинаться с pa_ для глобальных атрибутов.
  • Проблемы с производительностью при большом количестве товаров: разбивайте выборку на части с помощью posts_per_page и запускайте обновление партиями.

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

  • Запускайте массовые обновления в нерабочее время или на staging-сервере, чтобы не повлиять на пользователей.
  • Используйте WP-CLI для запуска скриптов массового обновления — это быстрее и надежнее, чем через веб-интерфейс.
  • Перед изменениями сделайте резервную копию базы данных.
  • Если обновляете тысячи товаров, добавьте паузу между партиями или используйте транзакции БД.
  • Избегайте обновления атрибутов товаров, которые не нуждаются в изменении — добавьте проверку текущих значений перед обновлением.

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

СпособПлюсыМинусыПодходит для
Админка WooCommerceПростота, не требует кодаНет редактирования атрибутовМелкие изменения не связанных с атрибутами
Плагины Bulk EditУдобный интерфейс, фильтрыПлатные, нагрузка, зависит от плагинаСредний и крупный магазин без навыков программирования
Кастомный PHP-кодМаксимальная гибкость, автоматизацияТребует навыков разработкиРазработчики, сложные задачи, автоматизация
Как автоматически удалять неактивных пользователей в WordPress
13.03.2026
Удаление и блокировка вредоносных комментариев в WordPress
20.03.2026
Автоматическое удаление заброшенных корзин в WooCommerce по расписанию без плагинов
05.06.2026
Решение проблемы с отображением корзины в WooCommerce при использовании кэширования
08.05.2026
Как изменить пути к медиаданным в WordPress без потери функциональности
28.02.2026