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

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

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

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

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

  • Частые изменения атрибутов и вариантов у сотен товаров.
  • Нужно обновлять данные на основе внешних триггеров (например, смена сезона).
  • Варианты товара меняются в зависимости от пользовательских настроек или условий.

Пошаговое решение: автоматическое изменение атрибутов и вариантов через хук сохранения товара

Ниже пример кода, который автоматически добавляет новый вариант с определённым атрибутом к товару при сохранении:

add_action('save_post_product', 'auto_update_product_variations', 20, 1); 
function auto_update_product_variations($post_id) {
    // Проверяем, что это не автосохранение
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;

    // Проверяем права пользователя
    if (!current_user_can('edit_post', $post_id)) return;

    $product = wc_get_product($post_id);
    if (!$product || $product->get_type() !== 'variable') return;

    // Получаем существующие вариации
    $variations = $product->get_children();

    // Пример: добавляем вариацию с атрибутом color = blue, если такой нет
    $attribute_name = 'pa_color'; // имя атрибута (slug)
    $desired_value = 'blue';

    $exists = false;
    foreach ($variations as $variation_id) {
        $variation = wc_get_product($variation_id);
        $attributes = $variation->get_attributes();
        if (isset($attributes[$attribute_name]) && $attributes[$attribute_name] === $desired_value) {
            $exists = true;
            break;
        }
    }

    if (!$exists) {
        // Создаём вариацию
        $variation_post = array(
            'post_title'  => $product->get_name() . ' – Blue',
            'post_name'   => 'product-' . $post_id . '-variation-blue',
            'post_status' => 'publish',
            'post_parent' => $post_id,
            'post_type'   => 'product_variation',
            'guid'        => home_url() . '/?product_variation=product-' . $post_id . '-variation-blue'
        );

        $variation_id = wp_insert_post($variation_post);

        if ($variation_id) {
            $variation = new WC_Product_Variation($variation_id);
            // Устанавливаем атрибут вариации
            $variation->set_attributes(array($attribute_name => $desired_value));
            // Устанавливаем цену (пример)
            $variation->set_regular_price(1000);
            $variation->save();
        }
    }
}

Этот код срабатывает при сохранении товара и добавляет вариацию с атрибутом цвета «синий», если она отсутствует.

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

Для изменения атрибута уже существующей вариации используйте:

$variation->set_attributes(array('pa_color' => 'red'));
$variation->save();

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

  1. Откройте в админке любой вариативный товар.
  2. Нажмите «Обновить» (сохранить).
  3. Проверьте вкладку «Вариации»: должна появиться вариация с атрибутом «цвет: синий».
  4. В каталоге товара на сайте проверьте наличие новой вариации и корректность цены.

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

  • Автоматическое добавление вариаций не срабатывает
    – Проверьте, что хук save_post_product подключён правильно и функция не завершается из-за условий.
    – Убедитесь, что товар вариативный ($product->get_type() === 'variable').
  • Новые вариации не отображаются в каталоге
    – Очистите кэш сайта и браузера.
    – Проверьте, что вариации опубликованы (post_status = 'publish').
  • Атрибуты не применяются
    – Проверьте, что атрибут зарегистрирован как глобальный в WooCommerce (в меню «Товары» → «Атрибуты»).
    – Используйте правильный slug атрибута (например, pa_color).

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

  • Избегайте выполнения кода при автосохранении – проверяйте DOING_AUTOSAVE внутри функции.
  • Кэширование: после массовых изменений используйте очистку кэша (например, если используете плагин кеширования).
  • Резервное копирование: перед автоматическим изменением большого числа товаров сделайте бэкап базы данных.
  • Тестирование: сначала тестируйте на тестовом сайте с копией данных.

Сравнение вариантов решения

Метод Описание Плюсы Минусы
Ручное добавление в админке Редактирование атрибутов и вариаций через UI WooCommerce Простота, не требует кода Трудозатратно при большом количестве товаров
Автоматизация через PHP код Добавление/изменение вариаций через хуки Экономия времени, гибкость Требует навыков программирования, риск ошибок
Плагины массового редактирования Использование готовых инструментов (например, WooCommerce Bulk Editor) Упрощение массового редактирования без кода Могут быть платными, ограничены функционалом
Как автоматизировать удаление спама в комментариях WordPress
14.02.2026
Автоматическая оптимизация изображений товаров в WooCommerce: ускоряем загрузку и повышаем конверсию
29.07.2026
Как исправить проблемы с изменением slug в WooCommerce после редактирования товара
17.04.2026
WooCommerce: как исправить ошибку отображения цены после изменения варианта товара
09.05.2026
Как отладить проблемы со скроллом в WordPress
05.11.2025