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

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

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

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

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

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

Пошаговое решение через пользовательский PHP-скрипт

1. Подготовка: резервное копирование и тестирование

Перед массовыми изменениями обязательно сделайте резервную копию базы данных и протестируйте скрипт на копии сайта или в тестовой среде. Ошибки могут повредить данные.

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

Пример PHP-кода для добавления нового значения атрибута pa_color всем товарам из категории с ID 15:

function add_attribute_value_to_products() {
    $attribute_name = 'pa_color'; // системное имя атрибута
    $new_value = 'blue'; // значение, которое нужно добавить
    $category_id = 15; // ID категории товаров

    $args = [
        'post_type' => 'product',
        'posts_per_page' => -1,
        'tax_query' => [
            [
                'taxonomy' => 'product_cat',
                'field' => 'term_id',
                'terms' => $category_id,
            ]
        ]
    ];

    $products = get_posts($args);

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

        // Проверяем, есть ли атрибут
        if (isset($attributes[$attribute_name])) {
            $attribute = $attributes[$attribute_name];
            if ($attribute->is_taxonomy()) {
                $terms = wp_get_post_terms($product->get_id(), $attribute_name, ['fields' => 'slugs']);
                if (!in_array($new_value, $terms)) {
                    $terms[] = $new_value;
                    wp_set_post_terms($product->get_id(), $terms, $attribute_name);
                }
            } else {
                // Для пользовательских атрибутов
                $options = $attribute->get_options();
                if (!in_array($new_value, $options)) {
                    $options[] = $new_value;
                    $attribute->set_options($options);
                    $attributes[$attribute_name] = $attribute;
                    $product->set_attributes($attributes);
                    $product->save();
                }
            }
        } else {
            // Если атрибут отсутствует, добавляем его
            $attribute = new WC_Product_Attribute();
            $attribute->set_name($attribute_name);
            $attribute->set_options([$new_value]);
            $attribute->set_visible(true);
            $attribute->set_variation(false);

            $attributes[$attribute_name] = $attribute;
            $product->set_attributes($attributes);
            $product->save();
        }
    }
}

// Запускаем функцию один раз (например, через админский крон или временно подключив в functions.php)
add_action('init', function () {
    if (current_user_can('manage_woocommerce')) {
        add_attribute_value_to_products();
    }
});

Этот код можно временно добавить в functions.php вашей темы или в специальный плагин для кастомных функций. После запуска его стоит удалить, чтобы не повторять операции.

3. Альтернатива: использование плагина Bulk Edit Products by WooCommerce

Если не хотите писать код, плагин Bulk Edit Products by WooCommerce позволяет массово менять атрибуты через интерфейс.

Преимущества:

  • Удобный UI для выбора товаров по фильтрам.
  • Массовое добавление, удаление и замена атрибутов.
  • Безопасность, встроенные проверки.

Минусы:

  • Бесплатная версия ограничена по функционалу.
  • Для сложных сценариев всё равно потребуется кастомный код.

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

Чтобы убедиться, что массовое обновление прошло успешно:

  • Откройте несколько товаров, для которых вы меняли атрибуты, и проверьте вкладку «Атрибуты» в админке товара.
  • На фронтенде проверьте фильтры по атрибутам — добавленное значение должно появляться и корректно работать.
  • Используйте WP CLI команду для проверки, например:
wp post list --post_type=product --meta_key='_product_attributes' --meta_value_like='pa_color' --fields=ID,post_title

Это покажет товары, у которых есть атрибут pa_color.

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

  • Ошибка: Атрибут не добавляется к товару.
    Причина: Неправильный системный идентификатор атрибута (нужно с префиксом pa_ и латиницей).
    Решение: Проверьте системное имя атрибута в Товары > Атрибуты.
  • Ошибка: Изменения не видны на сайте.
    Причина: Кэширование (плагин, сервер, CDN).
    Решение: Очистите кэш сайта и браузера.
  • Ошибка: Скрипт вызывает ошибки PHP или тормозит сайт.
    Причина: Запуск на живом сайте без ограничений.
    Решение: Используйте WP CLI для запуска скриптов или запускайте на тестовой среде, добавляйте лимиты по времени и памяти.

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

  • Всегда создавайте резервные копии перед массовыми обновлениями.
  • Используйте транзакции базы данных (если пишете сложные скрипты) для отката при ошибках.
  • Запускайте обновления партиями по 50–100 товаров, чтобы избежать таймаутов.
  • При большом количестве товаров лучше использовать WP CLI и писать отдельные команды.
  • Отключайте кэш и CDN во время массовых изменений, затем включайте обратно.

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

МетодПлюсыМинусыКогда использовать
Пользовательский PHP-скриптПолный контроль, бесплатно, гибкоНужно уметь программировать, риск ошибокБольшие магазины, уникальные сценарии
Плагин Bulk Edit ProductsПростой интерфейс, быстрая настройкаОграничения бесплатной версии, может не покрыть все задачиМалые и средние магазины, стандартные задачи
Как отключить AJAX в WooCommerce для улучшения производительности
24.05.2026
Как удалить пустые мета данные в WordPress для оптимизации базы данных
29.01.2026
Как создать и использовать динамические таблицы в WordPress
17.11.2025
Как отключить AJAX в WooCommerce для улучшения производительности
07.05.2026
Как удалить пустые категории в WordPress без плагинов
21.12.2025