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

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

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

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

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

1. Используем хук save_post_product для отслеживания обновления товара

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

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

    // Получаем объект товара
    $product = wc_get_product($post_ID);
    if (!$product || 'variable' !== $product->get_type()) return;

    // Получаем атрибуты товара
    $attributes = $product->get_attributes();
    if (empty($attributes)) return;

    $attr_values = [];
    foreach ($attributes as $attribute) {
        if (!$attribute->get_variation()) continue; // только вариационные атрибуты
        $options = $attribute->get_options();
        if (empty($options)) continue;

        // Получаем имена терминов
        $terms_names = [];
        foreach ($options as $term_id) {
            $term = get_term($term_id);
            if ($term && !is_wp_error($term)) {
                $terms_names[] = $term->name;
            }
        }
        if (!empty($terms_names)) {
            $attr_values[] = implode('/', $terms_names);
        }
    }

    if (empty($attr_values)) return;

    // Формируем новое название
    $base_title = $product->get_name();
    // Удаляем старые скобки с атрибутами, если есть
    $base_title = preg_replace('/\s*\([^)]*\)$/', '', $base_title);
    $new_title = $base_title . ' (' . implode(', ', $attr_values) . ')';

    // Обновляем название товара и сохраняем
    wp_update_post([
        'ID' => $post_ID,
        'post_title' => $new_title
    ]);
}

2. Обработка вариаций и их названий

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

add_filter('woocommerce_product_variation_title_include_attributes', '__return_false');

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

  1. Откройте в админке переменный товар с атрибутами.
  2. Отредактируйте товар и измените атрибуты (например, добавьте или удалите значения).
  3. Сохраните товар.
  4. Проверьте, что в названии товара появились соответствующие атрибуты в скобках, например: Футболка (Красный/Синий, L/XL).
  5. Перейдите на страницу товара на сайте — убедитесь, что название отображается корректно.

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

  • Название не меняется после сохранения: Проверьте, что хук save_post_product подключён корректно и функция не прерывается на проверках.
  • Появляются старые скобки с атрибутами: В функции используется регулярное выражение для удаления старых скобок, убедитесь, что оно не удаляет лишнее.
  • Некорректные названия атрибутов: Убедитесь, что атрибуты настроены как вариационные и используются термины таксономии, иначе функция не сможет получить имена.
  • Производительность падает при сохранении: Если атрибутов много, можно оптимизировать функцию, например, кэшировать термины.

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

  • Используйте проверку defined('DOING_AUTOSAVE') && DOING_AUTOSAVE чтобы избежать срабатывания функции при автосохранении.
  • Добавьте проверку прав пользователя, чтобы функция срабатывала только для администраторов или редакторов.
  • Для больших магазинов с множеством атрибутов и вариаций рассмотрите возможность отложенного обновления названий через WP-Cron, чтобы не замедлять сохранение товара.
  • Всегда делайте резервную копию перед внедрением кода, чтобы быстро откатиться в случае ошибок.

Сравнение способов решения задачи

МетодПлюсыМинусы
Код через save_post_productГибко, без плагинов, под контролем разработчикаТребует навыков PHP, может замедлить сохранение товара
Плагины для динамического названияПростота настройки, поддержкаМожет быть избыточно, нагрузка, зависимость от стороннего кода
Ручное обновление названияПростота, отсутствие кодаТрудозатратно, ошибки из-за забывчивости
Как автоматизировать удаление старых записей в WordPress с помощью WP-Cron и кастомных функций
16.04.2026
Кастомизация отчетов WooCommerce с помощью хуков и фильтров
13.12.2025
Как удалить или изменить атрибуты изображений в WordPress без плагинов
31.03.2026
Как изменить URL адрес постов в WordPress без перенаправлений
02.01.2026
Как отключить Gutenberg и вернуть классический редактор в WordPress
15.01.2026