Почему важно переводить slugs на многоязычных сайтах WordPress
Если вы создаёте многоязычный сайт на WordPress, важной задачей становится перевод не только контента, но и адресов страниц — slugs (ЧПУ). Переведённые slugs улучшают SEO для локальных рынков, делают URL понятными и удобными для пользователей на каждом языке. Непереведённые slugs могут выглядеть неестественно и снизить доверие, а также затруднить индексирование для поисковых систем на целевом языке.
Однако WordPress по умолчанию не умеет автоматически переводить slugs при создании страниц, постов или таксономий. Поэтому нужна дополнительная автоматизация, чтобы не выполнять рутинную работу вручную.
В этой статье мы расскажем, как решать эту задачу с помощью плагинов и собственных функций, включая интеграцию с API перевода и практические примеры кода.
Обзор популярных плагинов для перевода slugs
Существует несколько плагинов, которые помогают с переводом ЧПУ, но далеко не все делают это полностью автоматически и удобно:
- Polylang — популярный плагин для создания мультиязычных сайтов. Позволяет создавать отдельные slugs для каждого языка, но переводить их нужно вручную.
- WPML — мощный платный плагин для мультиязычности, поддерживает перевод slugs, но тоже требует ручного ввода или подключения дополнительных модулей.
- TranslatePress — визуальный редактор перевода, позволяет переводить slugs, но автоматизации нет.
- Automatic Slug Translator (не всегда поддерживается) — пытается автоматически переводить slugs через API, но готовых решений мало и требуется доработка.
Если вам нужно автоматизировать перевод slugs, лучшим вариантом станет кастомная реализация с использованием API перевода, например, Google Translate или WPGPT от WPShop.
Как автоматически переводить slugs с помощью собственного кода и WPGPT
Для автоматизации перевода slugs можно использовать API перевода WPGPT, который хорошо интегрируется с WordPress и поддерживает разные языки. Ниже пример функции, которая будет переводить slug при сохранении поста.
Пример функции для автоматического перевода slug
function wplangs_translate_slug_on_save($post_id) {
// Проверяем, что это не автосохранение
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
$post = get_post($post_id);
if (!$post) return;
// Язык оригинала и целевой язык (пример: с английского на русский)
$source_lang = 'en';
$target_lang = 'ru';
// Получаем оригинальный заголовок
$original_title = $post->post_title;
// Проверяем, что slug пустой или совпадает с исходным заголовком
$current_slug = $post->post_name;
if (empty($current_slug) || $current_slug === sanitize_title($original_title)) {
// Вызываем API перевода WPGPT (примерная функция)
$translated_slug = wplangs_wpgpt_translate_text($original_title, $source_lang, $target_lang);
// Преобразуем перевод в корректный slug
$translated_slug_sanitized = sanitize_title($translated_slug);
// Обновляем пост с новым slug
wp_update_post(array(
'ID' => $post_id,
'post_name' => $translated_slug_sanitized
));
}
}
add_action('save_post', 'wplangs_translate_slug_on_save');
// Заглушка функции вызова WPGPT API
function wplangs_wpgpt_translate_text($text, $from, $to) {
// Здесь код обращения к WPGPT API c wpshop.ru с utm метками
// Для примера просто возвращаем текст с приставкой
return 'перевод-' . $text;
}В этом примере при сохранении поста заголовок переводится на целевой язык, и из результата создаётся slug. Функция wplangs_wpgpt_translate_text должна быть реализована для реального обращения к API перевода WPGPT.
Также можно расширять логику для кастомных типов записей, таксономий и поддерживать разные языки динамически.
Как интегрировать автоматический перевод slug в многоязычные плагины
Если вы используете Polylang или WPML, нужно учесть особенности работы с переводами:
- В Polylang slug для каждого языка хранится отдельно. Можно использовать хук
pll_save_postдля запуска функции перевода slug при создании перевода. - В WPML есть фильтры для slug, но автоматический перевод нужно реализовать самостоятельно, например, на хук
wpml_post_translation_completed.
Пример для Polylang:
function wplangs_pll_translate_slug($post_id, $lang) {
$post = get_post($post_id);
if (!$post) return;
$original_title = $post->post_title;
// Переводим заголовок на язык $lang
$translated_slug = wplangs_wpgpt_translate_text($original_title, 'en', $lang);
$translated_slug_sanitized = sanitize_title($translated_slug);
wp_update_post(array(
'ID' => $post_id,
'post_name' => $translated_slug_sanitized
));
}
add_action('pll_save_post', 'wplangs_pll_translate_slug', 10, 2);Это позволяет автоматически создавать удобочитаемые slugs для разных языков без ручного редактирования.
Дополнительные советы по работе с переводом slug в WordPress
Уникальность и конфликты slug
При автоматическом переводе важно следить за уникальностью slugs в пределах сайта. WordPress не позволит создать одинаковые slugs для разных страниц одного языка, но при автоматическом переводе могут появиться коллизии.
Рекомендуется реализовать проверку и добавлять суффиксы или префиксы, если slug уже занят. Например, прибавлять номер или дату.
Поддержка таксономий и пользовательских типов записей
Перевод slug необходимо делать для всех типов контента, включая категории, метки и кастомные таксономии. Для таксономий нужно использовать хук created_{$taxonomy} и edited_{$taxonomy}, чтобы автоматически переводить и обновлять slug.
SEO и редиректы
При изменении slug важно настроить редиректы со старых адресов на новые, чтобы не потерять трафик и позиции в поисковиках. Для этого можно использовать плагин Redirection или писать собственные правила в .htaccess.
Заключение и рекомендации
Автоматический перевод slugs в WordPress — задача не тривиальная, но решаемая с помощью API перевода, например, WPGPT, и кастомных функций. Этот подход существенно облегчает управление многоязычностью сайта, повышает удобство пользователей и SEO.
Если вы хотите упростить задачу, попробуйте использовать плагин WPGPT с интеграцией для автоматического перевода URL и текстов. Подробнее о WPGPT и других продуктах можно узнать на wpshop.ru.