WooCommerce: как изменить название и URL вариации товара без плагинов

Диагностика проблемы с названием и URL вариации товара в WooCommerce

По умолчанию WooCommerce не предоставляет отдельного пользовательского интерфейса для изменения названия вариаций товаров — они наследуют название основного товара с атрибутами. URL вариаций тоже формируется автоматически и содержит ID вариации, что неудобно для SEO и пользовательского восприятия. В результате возникает задача: изменить название вариации и настроить человекочитаемый URL без использования сторонних плагинов.

Пошаговое решение: изменение названия вариации товара

1. Добавление пользовательского поля для названия вариации

Чтобы задать собственное название вариации, добавим новое поле в админку вариаций:

add_action('woocommerce_variation_options_pricing', 'add_custom_variation_title_field', 10, 3);
function add_custom_variation_title_field($loop, $variation_data, $variation) {
    woocommerce_wp_text_input(array(
        'id' => "custom_variation_title_{$variation->ID}",
        'label' => __('Custom Variation Title', 'woocommerce'),
        'desc_tip' => true,
        'description' => __('Введите уникальное название для вариации', 'woocommerce'),
        'value' => get_post_meta($variation->ID, '_custom_variation_title', true),
    ));
}

2. Сохранение значения пользовательского поля

add_action('woocommerce_save_product_variation', 'save_custom_variation_title_field', 10, 2);
function save_custom_variation_title_field($variation_id, $i) {
    if (isset($_POST["custom_variation_title_{$variation_id}"])) {
        update_post_meta($variation_id, '_custom_variation_title', sanitize_text_field($_POST["custom_variation_title_{$variation_id}"]));
    }
}

3. Отображение пользовательского названия вариации на фронтенде

Чтобы заменить стандартное отображение названия вариации на кастомное, используем фильтр:

add_filter('woocommerce_variation_option_name', 'show_custom_variation_title');
function show_custom_variation_title($term_name) {
    global $product;
    if (!$product || !is_product()) return $term_name;

    $available_variations = $product->get_available_variations();
    foreach ($available_variations as $variation) {
        $custom_title = get_post_meta($variation['variation_id'], '_custom_variation_title', true);
        if ($custom_title && strpos($term_name, $variation['attributes']['attribute_pa_color']) !== false) {
            return $custom_title;
        }
    }
    return $term_name;
}

Как изменить URL вариации товара на человекочитаемый

Для URL вариации по умолчанию WooCommerce использует структуру product/название-основного-товара/?attribute_pa_атрибут=значение или product/название-основного-товара/вариация-ID/. Чтобы сделать URL вариации более понятным, можно настроить канонические ссылки и перезаписать URL с помощью фильтров.

1. Добавление перезаписи URL для вариаций

Пример кода для создания человекочитаемого URL в формате product/название-основного-товара/название-вариации/:

add_filter('woocommerce_variation_is_active', 'custom_variation_slug_rewrite', 10, 2);
function custom_variation_slug_rewrite($active, $variation) {
    // Здесь можно добавить кастомную логику активации вариации
    return $active;
}

add_filter('post_type_link', 'custom_variation_permalink', 10, 4);
function custom_variation_permalink($permalink, $post, $leavename, $sample) {
    if ($post->post_type === 'product_variation') {
        $parent_id = wp_get_post_parent_id($post->ID);
        $parent_slug = get_post_field('post_name', $parent_id);
        $custom_title = get_post_meta($post->ID, '_custom_variation_title', true);
        $variation_slug = $custom_title ? sanitize_title($custom_title) : $post->post_name;
        return home_url("product/{$parent_slug}/{$variation_slug}/");
    }
    return $permalink;
}

2. Регистрация пользовательских правил перезаписи (rewrite rules)

add_action('init', 'add_custom_variation_rewrite_rules');
function add_custom_variation_rewrite_rules() {
    add_rewrite_rule(
        '^product/([^/]+)/([^/]+)/?$',
        'index.php?product=$matches[1]&variation_slug=$matches[2]',
        'top'
    );
}

После добавления правил нужно обновить пермалинки в админке (Настройки > Постоянные ссылки).

3. Обработка запроса вариации по кастомному слагу

Создаем фильтр для определения вариации по пользовательскому слагу в URL:

add_filter('request', 'parse_custom_variation_slug');
function parse_custom_variation_slug($query_vars) {
    if (isset($query_vars['variation_slug']) && isset($query_vars['product'])) {
        $product = wc_get_product(wp_get_post_parent_id(get_page_by_path($query_vars['product'])));
        if ($product) {
            foreach ($product->get_children() as $variation_id) {
                $custom_title = get_post_meta($variation_id, '_custom_variation_title', true);
                $variation_slug = $custom_title ? sanitize_title($custom_title) : '';
                if ($variation_slug === $query_vars['variation_slug']) {
                    $query_vars['product_variation'] = $variation_id;
                    break;
                }
            }
        }
    }
    return $query_vars;
}

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

  • Зайдите в админку товара, убедитесь, что поле «Custom Variation Title» отображается и сохраняется корректно.
  • На странице товара проверьте, что вариации показывают новое название.
  • Перейдите по новому URL вариации, например site.ru/product/название-товара/название-вариации/, и убедитесь, что открывается соответствующая вариация.
  • Обновите постоянные ссылки, чтобы новые rewrite-правила заработали.
  • Проверьте работу корзины и оформления заказа с вариациями — должны корректно добавляться товары с новыми названиями.

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

  • Поле для кастомного названия не сохраняется. Проверьте наличие и правильность woocommerce_save_product_variation хука и правильность ID поля в форме.
  • Новый URL вариации выдает 404. Забудьте обновить постоянные ссылки (Settings > Permalinks). Также проверьте правильность правил перезаписи и фильтров.
  • Вариация не отображается на странице товара. Убедитесь, что фильтр woocommerce_variation_option_name корректно возвращает название и не конфликтует с другими плагинами.
  • Проблемы с добавлением вариации в корзину по новому URL. Проверьте, что WooCommerce корректно получает ID вариации из запроса и не ломается функционал.

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

  • Используйте sanitize_text_field() и другие функции очистки для пользовательских данных, чтобы избежать XSS и инъекций.
  • Кешируйте результаты запросов метаданных вариаций, если на сайте много товаров — это снизит нагрузку.
  • Тестируйте изменения на staging-среде, чтобы не нарушить работу магазина в проде.
  • Следите за совместимостью с обновлениями WooCommerce, так как внутренние хуки могут меняться.
  • Если функционал усложняется, рассмотрите использование специализированных плагинов с поддержкой SEO для вариаций, например Clearfy Pro (https://wpshop.ru/plugins/clearfy?utm_source=wpdesk.ru&utm_medium=article&utm_campaign=woocommerce-kak-izmenit-nazvanie-i-url-variacii-tovara) для оптимизации URL.

Сравнение вариантов реализации изменения названия и URL вариации

ВариантОписаниеПлюсыМинусы
Код на functions.phpРучное добавление полей, фильтров и rewrite-правилПолный контроль, без плагиновСложность поддержки, возможность ошибок
Плагины SEO и оптимизацииГотовые решения для кастомизации URL и названийУдобство, поддержка, обновленияЗависимость от стороннего кода, возможные конфликты
КомпромиссЧастично код + плагины для SEOБаланс контроля и удобстваТребует знаний и тестирования
Как создать динамическую пагинацию в WordPress с поддержкой AJAX
13.02.2026
Как создать настройки плагина в WordPress
16.11.2025
WooCommerce: автоматическое удаление неактивных вариаций товаров
07.06.2026
Как создать автоматический импорт продуктов из CSV в WooCommerce
26.02.2026
WooCommerce: автоматическое обновление статуса возврата и возврат денег
04.07.2026

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