Почему важно автоматически обновлять названия вариаций в WooCommerce
В стандартном WooCommerce название вариации формируется из имени товара и перечисления выбранных атрибутов, например: "Футболка – Размер: M, Цвет: Красный". При изменении атрибутов вручную название не обновляется автоматически, что может привести к некорректному отображению и путанице для покупателей и администраторов.
Автоматизация этого процесса помогает поддерживать консистентность данных и улучшает UX, особенно при массовом изменении атрибутов вариаций.
Диагностика проблемы: как понять, что названия вариаций устарели
- В админке WooCommerce в списке вариаций отображаются старые названия, не соответствующие текущим атрибутам.
- На фронтенде в карточках товаров вариации названы некорректно.
- Изменения атрибутов не отражаются в имени вариации после обновления товара.
Пошаговое решение: автоматическое обновление названия вариации
1. Создание функции для генерации имени вариации
Используем стандартную функцию WooCommerce wc_get_formatted_variation для получения корректного текста вариации:
function wpset_update_variation_title( $variation_id ) {
$variation = wc_get_product( $variation_id );
if ( ! $variation || 'variation' !== $variation->get_type() ) {
return;
}
$parent = wc_get_product( $variation->get_parent_id() );
if ( ! $parent ) {
return;
}
// Получаем отформатированное название вариации
$variation_attributes = $variation->get_variation_attributes();
$formatted = wc_get_formatted_variation( $variation, true ); // true — с html
// Удаляем html теги для имени вариации
$formatted_plain = strip_tags( $formatted );
// Формируем новое название
$new_title = $parent->get_name() . ' – ' . $formatted_plain;
// Обновляем название вариации
wp_update_post( [
'ID' => $variation_id,
'post_title' => $new_title,
] );
}
2. Привязка функции к хуку сохранения вариации
Подключаем функцию к действию woocommerce_save_product_variation, которое вызывается при сохранении вариации в админке:
add_action( 'woocommerce_save_product_variation', 'wpset_update_variation_title', 10, 1 );
3. Массовое обновление старых вариаций (опционально)
Для обновления всех существующих вариаций можно запустить скрипт один раз, например через WP-CLI или временно добавить код:
function wpset_update_all_variation_titles() {
$args = [
'post_type' => 'product_variation',
'posts_per_page' => -1,
'post_status' => 'publish',
'fields' => 'ids',
];
$variation_ids = get_posts( $args );
foreach ( $variation_ids as $variation_id ) {
wpset_update_variation_title( $variation_id );
}
}
// Запустить один раз
// wpset_update_all_variation_titles();
Проверка результата после внедрения
- Зайдите в админку WooCommerce → Товары, откройте товар с вариациями.
- Измените атрибут вариации, сохранив изменения.
- Проверьте, что название вариации обновилось и отображает актуальные атрибуты.
- На фронтенде убедитесь, что в карточке товара название вариации соответствует новым атрибутам.
Частые ошибки и как их исправить
- Название не обновляется после сохранения вариации
Проверьте, что функция подключена к правильному хукуwoocommerce_save_product_variationи что нет конфликтов с другими плагинами, которые могут отменять сохранение. - В названии появляются HTML-теги
Используйтеstrip_tags()для удаления HTML из выводаwc_get_formatted_variation(). - Функция вызывает ошибки или замедляет админку
Убедитесь, что функция вызывается только при сохранении вариации, а не при каждом запросе. Для массового обновления используйте WP-CLI или отдельный скрипт.
Практические советы по производительности и безопасности
- Не запускайте массовое обновление названий на живом сайте без резервного копирования и теста на тестовом окружении.
- Кэширование: если сайт использует объектный кэш или внешние системы (Redis, Memcached), очистите кэш после массового обновления.
- Безопасность: убедитесь, что обновление названий вариаций выполняется только администраторами или пользователями с необходимыми правами.
Сравнение вариантов автоматизации обновления названий вариаций
| Метод | Преимущества | Недостатки |
|---|---|---|
| Ручное редактирование названий | Просто, без кода | Трудозатратно, ошибки, не масштабируется |
Код на хуке woocommerce_save_product_variation | Автоматизация, точность, масштабируемость | Требует навыков разработки, риск ошибок без тестирования |
| Плагины для управления вариациями | Готовые решения, удобный интерфейс | Могут замедлять сайт, часто платные |