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

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

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

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

  • Максимальную оптимизацию скорости;
  • Полный контроль над структурой и логикой;
  • Возможность интегрировать переводчики или API по своему желанию;
  • Минимум сторонних зависимостей.

Подобный подход особенно полезен для опытных разработчиков и тех, кто хочет кастомное решение.

Общая архитектура многоязычного сайта без плагинов

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

Например, для страниц:

  • ru.site.com/about — страница на русском;
  • en.site.com/about — страница на английском;
  • или site.com/ru/about и site.com/en/about в случае с префиксами.

Также можно хранить языковые версии через мета-поля для одной записи, но это сложнее при масштабировании.

Шаг 1. Добавляем язык в URL с помощью .htaccess или настроек сервера

Для удобства пользователей и SEO рекомендуем использовать префиксы в URL. Например, site.com/ru/ и site.com/en/. Если у вас Apache, можно настроить в .htaccess редиректы на index.php с передачей параметра языка:

# Пример для Apache .htaccess
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/(ru|en)/
RewriteRule ^(ru|en)/(.*)$ index.php?lang=$1&path=$2 [QSA,L]

Если у вас nginx, настройте location с регулярными выражениями, чтобы передавать параметр lang.

Это позволит в PHP получить текущий язык через $_GET['lang'] и подгрузить контент.

Шаг 2. Определяем текущий язык и сохраняем в сессии или cookie

Чтобы не передавать параметр языка в каждом URL, можно сохранить выбор пользователя в cookie или сессии:

function wp7_ru_get_current_language() {
    if (isset($_GET['lang'])) {
        $lang = $_GET['lang'];
        setcookie('site_lang', $lang, time() + 3600*24*30, '/');
    } elseif (isset($_COOKIE['site_lang'])) {
        $lang = $_COOKIE['site_lang'];
    } else {
        $lang = 'ru'; // язык по умолчанию
    }
    return $lang;
}

Далее вызывайте эту функцию в начале темы или плагина, чтобы получить текущий язык.

Шаг 3. Создаем отдельные страницы и записи для каждого языка

В админке WordPress создайте для каждой страницы дубликат на нужном языке. Например:

  • Страница «О нас» (ID=100) — русский вариант;
  • Страница «About us» (ID=101) — английский вариант.

Чтобы связать эти записи, можно использовать произвольное поле wp7_ru_lang_group с одним и тем же значением, например, about-page. Так вы будете знать, что эти страницы — языковые версии друг друга.

Пример добавления мета-поля:

update_post_meta(100, 'wp7_ru_lang_group', 'about-page');
update_post_meta(101, 'wp7_ru_lang_group', 'about-page');

Шаг 4. Выводим контент на нужном языке в шаблоне

В шаблонах темы замените стандартный the_content() на функцию, которая подгружает контент именно для текущего языка:

function wp7_ru_get_translated_post_id($post_id, $lang) {
    $group = get_post_meta($post_id, 'wp7_ru_lang_group', true);
    if (!$group) return $post_id;

    $args = [
        'post_type' => 'page',
        'meta_query' => [
            ['key' => 'wp7_ru_lang_group', 'value' => $group],
        ],
        'posts_per_page' => 1,
        'meta_key' => 'lang',
        'meta_value' => $lang
    ];
    $query = new WP_Query($args);
    if ($query->have_posts()) {
        return $query->posts[0]->ID;
    }
    return $post_id;
}

function wp7_ru_the_content_translated() {
    global $post;
    $lang = wp7_ru_get_current_language();
    $translated_id = wp7_ru_get_translated_post_id($post->ID, $lang);
    $content = get_post_field('post_content', $translated_id);
    echo apply_filters('the_content', $content);
}

В шаблоне вместо the_content() вызовите wp7_ru_the_content_translated(). Аналогично можно сделать для заголовков и других полей.

Шаг 5. Переключатель языков и ссылки с UTM-метками

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

function wp7_ru_language_switcher() {
    global $post;
    $group = get_post_meta($post->ID, 'wp7_ru_lang_group', true);
    if (!$group) return;

    $languages = ['ru' => 'Русский', 'en' => 'English'];
    echo '<ul class="language-switcher">';
    foreach ($languages as $code => $name) {
        $args = [
            'post_type' => 'page',
            'meta_query' => [
                ['key' => 'wp7_ru_lang_group', 'value' => $group],
                ['key' => 'lang', 'value' => $code]
            ],
            'posts_per_page' => 1
        ];
        $query = new WP_Query($args);
        if ($query->have_posts()) {
            $link = get_permalink($query->posts[0]->ID);
            $utm = '?utm_source=wp7.ru&utm_medium=article&utm_campaign=sozdat-mnogoiazychnyi-sait';
            echo '<li><a href="' . esc_url($link . $utm) . '">' . esc_html($name) . '</a></li>';
        }
    }
    echo '</ul>';
}

Этот переключатель можно вывести в header.php или в любом месте темы.

Дополнительные советы и улучшения

SEO и hreflang

Для правильного SEO обязательно добавьте в <head> теги hreflang, указывающие поисковикам языковые версии страниц. Это можно сделать динамически через хук wp_head.

Обработка перевода меню и виджетов

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

Использование API переводов

Если нужно, можно интегрировать Google Translate API или Яндекс Переводчик для автоматического перевода, а затем вручную корректировать текст. Это ускорит создание контента.

Заключение

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

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

Как создать динамическое меню в WordPress с применением WP7
05.01.2026
Как защитить WordPress от bruteforce атак
20.11.2025
Как создать многоязычный сайт на WordPress без плагинов
18.12.2025
Как создать плагин для автоматизации задач в WordPress
30.11.2025
Как удалить или заблокировать плагин WordPress правильно
08.11.2025