В чем проблема с URL товаров при изменении названия?
В WooCommerce по умолчанию URL товара формируется на основе его названия (slug). При изменении названия товара URL не обновляется автоматически, что приводит к рассинхронизации и появлению 404 ошибок или необходимости вручную редактировать постоянные ссылки. Это особенно критично для крупных магазинов, где частые изменения названий товаров происходят в рамках обновления ассортимента или корректировок.
Диагностика проблемы
Если после изменения названия товара его URL не меняется, проверьте:
- Редактируется ли поле «Ярлык» (slug) товара вручную – часто оно остается без изменений.
- Настройки постоянных ссылок в WordPress:
Настройки > Постоянные ссылки– они должны быть корректно настроены. - Отсутствие плагинов или кода, который блокирует изменение slug.
Для проверки, что URL не изменился, откройте страницу редактирования товара и сравните поле «Ярлык» с текущим названием.
Пошаговое решение: автоматическое обновление slug при изменении названия
Реализуем автоматическое обновление slug товара при изменении его названия с помощью добавления кода в functions.php дочерней темы или в плагин-сниппет.
add_action('save_post_product', 'auto_update_product_slug_on_title_change', 10, 3);
function auto_update_product_slug_on_title_change($post_ID, $post, $update) {
// Проверяем, что это обновление, а не создание
if (!$update) {
return;
}
// Берем текущее название и ярлык
$title = $post->post_title;
$slug = $post->post_name;
// Генерируем новый slug из названия
$new_slug = sanitize_title($title);
if ($slug !== $new_slug) {
// Обновляем slug товара
wp_update_post(array(
'ID' => $post_ID,
'post_name' => $new_slug
));
// Очистка кэша постоянных ссылок
flush_rewrite_rules(false);
}
}Этот код при сохранении товара автоматически обновляет поле post_name (slug), если название изменилось.
Как проверить, что решение работает?
- Создайте тестовый товар с названием «Товар А».
- Перейдите к редактированию товара и измените название на «Товар Б».
- Сохраните изменения и посмотрите, изменился ли URL товара в админке и на фронте.
- Если URL обновился, значит код работает корректно.
Частые ошибки и их устранение
- Ничего не меняется после сохранения: возможно, при сохранении не вызывается хук
save_post_productиз-за кэширования. Попробуйте временно отключить кэш-плагины и проверить. - Появляются дубликаты URL: если новый slug уже существует, WordPress добавит суффикс. Для предотвращения конфликтов нужно проверять уникальность slug с помощью функции
wp_unique_post_slug(). - Изменение slug ломает SEO-ссылки: при автоматическом изменении URL рекомендуется настроить 301 редиректы со старых URL на новые, например, с помощью плагина Redirection или собственного кода.
Рекомендации по безопасности и производительности
- Добавляйте код только в дочернюю тему или отдельный плагин, чтобы избежать потери при обновлениях.
- Вызывайте
flush_rewrite_rules()только один раз после обновления slug — массовый вызов может замедлить сайт. - Перед массовым применением решения на большом магазине создайте резервную копию базы данных.
Альтернативы: плагины и собственный код
| Метод | Преимущества | Недостатки |
|---|---|---|
| Собственный код (как выше) | Тонкая настройка, отсутствие дополнительных плагинов | Требует тестирования, возможны ошибки при сложных запросах |
| Плагин "Permalink Manager Lite" | Управление URL, массовое редактирование | Может конфликтовать с кастомным функционалом, требует изучения интерфейса |
| Ручное редактирование slug | Простота | Трудозатратно, риск пропуска товаров |