wplinks.ru wordpress WPLinks.ru

Автоматическое обновление URL товаров WooCommerce при изменении названия

Почему важно обновлять URL товаров при изменении названия

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

Диагностика проблемы: как проверить, что URL не обновляется

Измените название товара в админке WooCommerce и сохраните. Затем откройте страницу товара на сайте и проверьте URL – он останется прежним, если автоматизация не настроена. Дополнительно проверьте, есть ли перенаправления с старого URL на новый – по умолчанию их нет, что ведет к 404 ошибкам при смене URL вручную.

Пошаговое решение: обновление URL с автоматическим редиректом

1. Автоматическое обновление слага при сохранении товара

Добавьте следующий код в functions.php вашей дочерней темы или в кастомный плагин:

add_action('save_post_product', 'auto_update_product_slug_on_title_change', 20, 3);
function auto_update_product_slug_on_title_change($post_ID, $post, $update) {
    // Проверяем, это товар
    if ($post->post_type !== 'product') return;

    // Получаем текущий слаг и название
    $current_slug = $post->post_name;
    $new_slug = sanitize_title($post->post_title);

    // Если слаг совпадает с названием, ничего не делаем
    if ($current_slug === $new_slug) return;

    // Обновляем слаг
    global $wpdb;
    $wpdb->update(
        $wpdb->posts,
        ['post_name' => $new_slug],
        ['ID' => $post_ID],
        ['%s'],
        ['%d']
    );

    // Очищаем кэш
    clean_post_cache($post_ID);
}

2. Создание 301 редиректа со старого URL на новый

Чтобы избежать ошибок 404 и сохранить SEO, нужно настроить редирект:

add_action('save_post_product', 'add_redirect_on_slug_change', 25, 3);
function add_redirect_on_slug_change($post_ID, $post, $update) {
    if ($post->post_type !== 'product') return;

    static $old_slug = null;

    if ($old_slug === null) {
        $old_slug = get_post_field('post_name', $post_ID, 'db');
        return; // При первом вызове сохраняем старый слаг и выходим
    }

    $new_slug = sanitize_title($post->post_title);
    if ($old_slug !== $new_slug) {
        // Добавляем редирект с wp_redirect или через плагин редиректов
        // Здесь пример с использованием transient для хранения редиректа
        set_transient('redirect_product_'.$old_slug, $new_slug, 30 * DAY_IN_SECONDS);
        $old_slug = $new_slug; // Обновляем старый слаг
    }
}

add_action('template_redirect', function() {
    if (is_singular('product')) {
        global $post;
        $current_slug = $post->post_name;
        $redirect_slug = get_transient('redirect_product_'.$current_slug);
        if ($redirect_slug) {
            wp_redirect(site_url('/product/'.$redirect_slug), 301);
            exit;
        }
    }
});

Учтите, что для профессионального редиректа лучше использовать готовые плагины (например, Redirection), либо реализовать свою таблицу редиректов в базе.

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

  • Измените название товара в админке и сохраните.
  • Перейдите по старому URL товара — должен произойти редирект на новый URL.
  • Убедитесь, что на странице товара отображается актуальное название и URL браузера совпадает с новым слагом.
  • Проверьте в консоли разработчика отсутствие ошибок JavaScript и 404 HTTP статус.

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

  • Слаг не меняется после обновления: возможно, кеширование на уровне сервера или плагина. Очистите кеш и проверьте.
  • Редирект не срабатывает: проверьте, что хук template_redirect не конфликтует с другими плагинами, и что transient устанавливается корректно.
  • Несовпадение URL из-за пользовательских правил ЧПУ: убедитесь, что структура постоянных ссылок подходит — для товаров обычно /product/%product%.
  • Некорректное обновление слага для товаров с одинаковыми названиями: WordPress добавляет числовой суффикс, это нормальное поведение, учитывайте при редиректах.

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

  • Не редактируйте слаг напрямую в базе без необходимых проверок — это может привести к конфликтам URL.
  • Для массового обновления слагов используйте WP-CLI скрипты с проверкой уникальности.
  • Используйте проверенные плагины для управления редиректами, чтобы избежать проблем с производительностью и безопасностью.
  • Регулярно проверяйте журнал ошибок сервера после внесения изменений.

Сравнение подходов обновления URL товаров WooCommerce

МетодПлюсыМинусыПример
Ручное обновление слагаПростота, контрольТрудозатратно, ошибки, отсутствие редиректовВ админке WordPress
Код для автозамены слагаАвтоматизация, поддержка SEO при редиректахТребует тестирования, может конфликтовать с плагинамиКод из статьи
Использование плагинов редиректовГибкость, удобство управленияДополнительная нагрузка, возможные конфликтыRedirection, Rank Math
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше