wplang.ru wordpress WP Lang

Как сделать перенос языка в URL WordPress

Для мультиязычных сайтов на 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 и кэширование, чтобы мультиязычный сайт работал быстро и корректно.

×
Оптимизируй свой сайт!

Скидка -15% на премиум плагин Clearfy Pro

Купить плагин сейчас ⋙