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

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

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

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

  • Дополнительная нагрузка на сайт и базу данных.
  • Сложность настройки и возможные конфликты с другими плагинами.
  • Ограничения в кастомизации и зависимости от разработчика плагина.

Создавая мультиязычный сайт самостоятельно, вы получаете:

  • Легковесность и полный контроль над логикой.
  • Возможность адаптировать решение под свои особенности.
  • Понимание устройства мультиязычности в WordPress на уровне кода.

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

1. Структура URL и настройка постоянных ссылок

Первый шаг — определить, как будут выглядеть URL для разных языков. Обычно выбирают один из трех вариантов:

  • Поддомены — ru.example.com, en.example.com
  • Подкаталоги — example.com/ru/, example.com/en/
  • Параметры GET — example.com/?lang=ru

Для простоты и SEO лучше использовать подкаталоги. Для этого нужно настроить правила перезаписи и добавить поддержку в теме.

2. Создание пользовательской функции для определения текущего языка

Добавьте в functions.php темы следующий код, который будет определять язык по URI:

function wordpresses_get_current_language() {
    $uri = trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/');
    $parts = explode('/', $uri);
    $lang = 'ru'; // язык по умолчанию
    $available_languages = ['ru', 'en', 'de']; // список поддерживаемых языков
    if (in_array($parts[0], $available_languages)) {
        $lang = $parts[0];
    }
    return $lang;
}

Эта функция анализирует первый сегмент пути и возвращает текущий язык. Если язык не найден, возвращается русский как основной.

3. Перехват запросов и фильтрация контента по языку

Для хранения переведенного контента можно использовать таксономии, метаполя или отдельные записи. Например, если у вас есть посты с переводами, можно использовать метаполе lang для указания языка записи.

Добавим фильтр запросов, который будет выводить записи только нужного языка:

function wordpresses_filter_posts_by_language($query) {
    if (!is_admin() && $query->is_main_query()) {
        $lang = wordpresses_get_current_language();
        $meta_query = [
            [
                'key' => 'lang',
                'value' => $lang,
                'compare' => '='
            ]
        ];
        $query->set('meta_query', $meta_query);
    }
}
add_action('pre_get_posts', 'wordpresses_filter_posts_by_language');

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

4. Создание переключателя языков

Для удобства посетителей нужно добавить переключатель языков, который меняет URL подкаталога.

Пример простого переключателя в footer.php или виджете темы:

function wordpresses_language_switcher() {
    $current_lang = wordpresses_get_current_language();
    $available_languages = [
        'ru' => 'Русский',
        'en' => 'English',
        'de' => 'Deutsch'
    ];
    $uri = trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/');
    $parts = explode('/', $uri);
    if (in_array($parts[0], array_keys($available_languages))) {
        array_shift($parts);
    }
    $base_path = implode('/', $parts);
    echo '<ul class="language-switcher">';
    foreach ($available_languages as $code => $name) {
        $link = '/' . $code . '/' . $base_path;
        $active_class = ($code === $current_lang) ? 'class="active"' : '';
        echo "<li $active_class><a href='$link'>$name</a></li>";
    }
    echo '</ul>';
}

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

Дополнительные технические рекомендации

Обработка перевода контента

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

SEO и hreflang

Не забудьте добавить в header теги hreflang, чтобы поисковые системы понимали, что страницы дублируются для разных языков:

function wordpresses_add_hreflang() {
    $langs = ['ru', 'en', 'de'];
    $current_uri = trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/');
    $parts = explode('/', $current_uri);
    if (in_array($parts[0], $langs)) {
        array_shift($parts);
    }
    $base_path = implode('/', $parts);
    foreach ($langs as $lang) {
        $url = home_url("/$lang/$base_path");
        echo "<link rel=\"alternate\" hreflang=\"$lang\" href=\"$url\" />\n";
    }
}
add_action('wp_head', 'wordpresses_add_hreflang');

Настройка .htaccess для корректной работы

Для правильной обработки подкаталогов с языками убедитесь, что в .htaccess включен модуль rewrite и прописаны стандартные правила WordPress. Если нужно запретить доступ к языковым подкаталогам, которых нет, добавьте дополнительные правила, но обычно достаточно стандартных.

Использование плагина Clearfy Pro для управления SEO мультиязычностью

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

Например, с помощью Clearfy Pro можно гибко настроить создание карты сайта (sitemap) с поддержкой нескольких языков и задать правильные заголовки SEO для каждой версии страницы.

Вывод

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

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

Как создать автоматический импорт товара из Excel в WooCommerce без плагинов
17.02.2026
Как добавить автоматическое сохранение в визуальном редакторе Gutenberg WordPress
05.03.2026
Как создать многоязычный сайт на WordPress без плагинов
23.02.2026
Как создать собственный шорткод в WordPress
06.11.2025
Как избежать конфликтов между плагинами в WordPress: практические советы и примеры
28.03.2026