Почему важно обновлять 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 |