Для мультиязычных сайтов на WordPress часто возникает задача структурировать URL, добавляя в них сегмент с кодом языка, например, site.ru/en/ или site.ru/ru/. Такой подход улучшает SEO, упрощает навигацию для пользователей и помогает правильно обрабатывать язык контента.
Почему важно добавлять язык в URL
Добавление языка в URL — это стандартная практика для мультиязычных сайтов, которая позволяет:
- Поисковым системам легче определять язык страницы.
- Пользователям сразу видеть, на каком языке открывается страница.
- Избежать дублирования контента, если одна и та же страница доступна на разных языках.
- Упростить настройку кэширования и CDN для разных языковых версий.
Без языка в URL часто используются параметры GET или cookie для определения языка, но они менее удобны и не так прозрачны для SEO.
Как реализовать перенос языка в URL на WordPress — варианты
Использование плагинов для мультиязычности
Самый простой способ — использовать проверенные плагины, которые умеют добавлять языковой сегмент в URL:
- WPML — один из самых популярных плагинов для мультиязычности. Позволяет настроить структуру URL с языковым сегментом, например,
site.ru/en/. WPML автоматически формирует нужные правила перезаписи и фильтры. - Polylang — бесплатный и простой плагин, который также добавляет поддержку языков в URL. Позволяет использовать поддомены, директории или параметры.
Использование готового решения экономит время и уменьшает вероятность ошибок.
Реализация вручную с помощью функций WordPress
Если вы хотите сделать перенос языка в URL без плагинов, можно использовать хуки rewrite_rules_array и parse_request. Рассмотрим пример, как добавить поддержку двух языков — ru и en — с их сегментами в URL.
Шаг 1. Добавляем правила перезаписи URL
function wplang_add_language_rewrite_rules($rules) {
$new_rules = array(
'^(ru|en)/?(.*)?$' => 'index.php?lang=$matches[1]&pagename=$matches[2]',
);
return $new_rules + $rules;
}
add_filter('rewrite_rules_array', 'wplang_add_language_rewrite_rules');Этот код добавляет правило, которое перехватывает запросы с первым сегментом ru или en и передает их в запрос с параметром lang.
Шаг 2. Регистрируем новый параметр запроса
function wplang_add_query_vars($vars) {
$vars[] = 'lang';
return $vars;
}
add_filter('query_vars', 'wplang_add_query_vars');Это позволит WordPress распознавать параметр lang в URL.
Шаг 3. Обрабатываем язык при инициализации
function wplang_set_locale_by_query_var() {
global $wp;
$lang = get_query_var('lang');
if ($lang === 'ru' || $lang === 'en') {
switch_to_locale($lang === 'ru' ? 'ru_RU' : 'en_US');
}
}
add_action('wp', 'wplang_set_locale_by_query_var');Этот код переключает локаль WordPress в зависимости от параметра языка.
Шаг 4. Генерация ссылок с языковым сегментом
Чтобы все ссылки на сайте корректно содержали язык в URL, можно использовать фильтр post_link и аналогичные для страниц:
function wplang_add_lang_to_permalink($permalink, $post) {
$lang = determine_current_language(); // ваша логика определения языка
if ($lang) {
$permalink = home_url("/" . $lang . str_replace(home_url(), '', $permalink));
}
return $permalink;
}
add_filter('post_link', 'wplang_add_lang_to_permalink', 10, 2);
add_filter('page_link', 'wplang_add_lang_to_permalink', 10, 2);Функцию determine_current_language() нужно реализовать в зависимости от логики сайта, например, читать из сессии, cookie или user meta.
Обработка мультиязычного контента с пользовательскими полями ACF
Если вы используете Advanced Custom Fields для хранения дополнительного контента, важно учитывать язык при выводе.
Можно использовать отдельные поля для каждого языка с суффиксом, например, title_ru и title_en, а в коде выбирать нужное в зависимости от текущего языка из URL.
function wplang_get_acf_field_by_lang($field_base) {
$lang = get_query_var('lang') ?: 'ru';
$field_name = $field_base . '_' . $lang;
return get_field($field_name);
}Такой подход позволяет не создавать отдельные записи для каждого языка, а хранить все данные в одном посте.
Советы по совместимости с SEO и кэшированием
При добавлении языка в URL важно:
- Указать hreflang теги в
<head>для каждой языковой версии, чтобы поисковики понимали связь страниц. - Настроить правильные редиректы с неязыковых URL на языковые, чтобы избежать дублей.
- Проверить работу кэширования и CDN, чтобы они учитывали параметр языка и не выдавали контент на одном языке для другого.
Для автоматизации и удобства можно использовать плагин Clearfy Pro, который оптимизирует работу с URL и кэшированием.
Заключение
Добавление языка в URL WordPress — задача, которая требует аккуратной настройки правил перезаписи, обработки параметров и генерации ссылок. Готовые плагины, такие как WPML и Polylang, значительно упрощают работу, но при необходимости можно реализовать и собственное решение с помощью хуков WordPress.
Используйте приведённые примеры кода как основу для своей реализации и не забывайте про SEO и кэширование, чтобы мультиязычный сайт работал быстро и корректно.