Как создать многоязычные URL в WordPress без плагинов

Владельцам сайтов на WordPress часто нужна возможность создавать многоязычные версии страниц с разными URL для каждого языка. Многие сразу ищут готовые плагины, например, WPML или Polylang, однако иногда хочется обойтись без них, чтобы избежать лишней нагрузки или сохранить полный контроль над URL. В этой статье разберём, как реализовать многоязычные URL в WordPress без плагинов, используя только возможности темы и функций WordPress.

Почему стоит создавать многоязычные URL без плагинов

Плагины для мультиязычности удобны, но имеют свои недостатки:

  • Увеличивают нагрузку на сайт и базу данных.
  • Могут создавать конфликты с другими плагинами.
  • Иногда ограничивают гибкость настройки URL.

Реализация мультиязычности вручную позволит легче интегрировать кастомные решения и оптимизировать производительность, а также лучше понять, как работает маршрутизация в WordPress.

Основные подходы к многоязычным URL без плагинов

Существует несколько методов реализации многоязычных URL:

  • Использование поддоменов (ru.example.com, en.example.com).
  • Использование подкаталогов (example.com/ru/, example.com/en/).
  • Использование параметров запроса (?lang=ru, ?lang=en).

В этой статье остановимся на варианте с подкаталогами, так как он проще всего реализуется и удобен для SEO.

Настройка пермалинков для подкаталогов языков

Для начала нужно добавить в WordPress обработку префикса языка в URL. Для этого воспользуемся хуком rewrite_rules_array и добавим правила для каждого языка.

add_filter('rewrite_rules_array', 'wpsell_add_language_rewrite_rules');
function wpsell_add_language_rewrite_rules($rules) {
    $langs = array('ru', 'en'); // список языков
    $new_rules = array();
    foreach ($langs as $lang) {
        // Перенаправление запросов вида /ru/slug
        $new_rules[$lang . '/(.+?)/?$'] = 'index.php?pagename=$matches[1]&lang=' . $lang;
        $new_rules[$lang . '/?$'] = 'index.php?lang=' . $lang;
    }
    return $new_rules + $rules;
}

Это добавит правила, распознающие URL с префиксом языка и передающие параметр lang.

Обработка параметра языка в WordPress

Далее необходимо перехватывать параметр lang и переключать язык сайта. Для этого используем фильтр request:

add_filter('request', 'wpsell_parse_lang_parameter');
function wpsell_parse_lang_parameter($query_vars) {
    if (isset($_GET['lang'])) {
        $query_vars['lang'] = sanitize_text_field($_GET['lang']);
    } elseif (isset($query_vars['lang'])) {
        $query_vars['lang'] = sanitize_text_field($query_vars['lang']);
    } else {
        $query_vars['lang'] = 'ru'; // язык по умолчанию
    }
    return $query_vars;
}

Теперь в шаблонах и функциях можно использовать глобальный параметр языка для вывода контента на нужном языке.

Хранение и вывод контента на нескольких языках

Самая простая реализация — хранить в метаполях записи контент для каждого языка. Например, для записи можно добавить метаполя content_ru и content_en.

В шаблоне для вывода записи используем примерно такой код:

global $wp_query;
$lang = isset($wp_query->query_vars['lang']) ? $wp_query->query_vars['lang'] : 'ru';
$content = get_post_meta(get_the_ID(), 'content_' . $lang, true);
if (!$content) {
    $content = get_the_content(); // fallback
}
echo apply_filters('the_content', $content);

Так мы выводим контент на нужном языке, если он задан.

Управление ссылками и навигацией

Очень важно, чтобы все ссылки сайта учитывали текущий язык и вели на корректный URL с языковым префиксом.

Для этого переопределим функцию генерации ссылок:

function wpsell_get_lang_url($url, $lang) {
    $parsed = parse_url($url);
    $path = isset($parsed['path']) ? $parsed['path'] : '';
    $path = '/' . trim($lang, '/') . $path;
    $new_url = $parsed['scheme'] . '://' . $parsed['host'] . $path;
    if (isset($parsed['query'])) {
        $new_url .= '?' . $parsed['query'];
    }
    return $new_url;
}

В навигационных меню, хлебных крошках и других местах используйте эту функцию для формирования ссылок с языковыми префиксами.

Пример простого переключателя языка

Добавим в шаблон переключатель языка, который будет менять URL текущей страницы, подставляя нужный префикс:

function wpsell_language_switcher() {
    $langs = array('ru' => 'Русский', 'en' => 'English');
    $current_url = home_url(add_query_arg(array(), $wp->request));
    echo '<ul class="language-switcher">';
    foreach ($langs as $code => $label) {
        $url = preg_replace('#^/(ru|en)/#', '/' . $code . '/', $_SERVER['REQUEST_URI']);
        if (!preg_match('#^/(ru|en)/#', $_SERVER['REQUEST_URI'])) {
            $url = '/' . $code . $_SERVER['REQUEST_URI'];
        }
        echo '<li><a href="' . esc_url(home_url($url)) . '">' . esc_html($label) . '</a></li>';
    }
    echo '</ul>';
}

Выводите wpsell_language_switcher() в нужном месте темы, чтобы пользователи могли переключать языки.

Преимущества и ограничения ручного метода

Преимущества:

  • Минимум зависимостей, лёгкость контроля.
  • Полный контроль над URL и выводом.
  • Возможность кастомизации под любые нужды.

Ограничения:

  • Необходимость вручную создавать и поддерживать переводы.
  • Отсутствие интеграции с автоматическими переводчиками.
  • Требует знаний PHP и WordPress API.

Заключение

Создание многоязычных URL в WordPress без плагинов — вполне осуществимая задача, если вам нужна лёгкая и гибкая реализация с минимальными зависимостями. Используя перезапись правил, параметры запроса и метаполя в записях, вы можете полностью контролировать структуру URL и контент для каждого языка.

Если хотите более продвинутые решения с интеграцией и удобным интерфейсом, плагины остаются хорошим выбором. Но для небольших проектов или опытных разработчиков ручная настройка — отличный вариант.

Больше инструментов и плагинов для оптимизации и расширения функционала WordPress вы можете найти на wpshop.ru.

Как каскадно удалять записи и метаданные в WordPress
06.03.2026
Добавляем вывод товаров WooCommerce по категориям через код: практическое руководство
21.05.2026
Как настроить автоматический экспорт товаров WooCommerce в CSV
14.02.2026
Как удалить неиспользуемые метаданные в WordPress без риска
05.04.2026
Как сделать точное управление ролями в WordPress с примерами
22.12.2025

Совсем скоро здесь заработает сайт о вордпресс. И будет он связан с продажами, магазинами или чем-то таким.