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

Добавление поддержки нескольких языков на сайт WordPress — частая задача, особенно если хочется обойтись без плагинов, чтобы сохранить производительность и контроль над кодом. В этой статье на wpmax.ru разберём, как реализовать многоязычность своими силами, используя возможности темы и PHP. Это полезно для разработчиков, которые хотят минимизировать зависимости и сделать кастомное решение.

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

Плагины вроде WPML, Polylang и TranslatePress очень удобны, но иногда они создают избыточную нагрузку и усложняют поддержку сайта. Без плагинов вы получите:

  • Минимум стороннего кода — меньше уязвимостей и конфликтов.
  • Полный контроль над логикой переключения языка и выводом контента.
  • Возможность оптимизировать запросы и кэширование.

Минус — придётся писать и поддерживать код самостоятельно, но для опытных разработчиков это вполне выполнимая задача.

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

Без плагина нужно самим решить, где хранить переводы. Есть несколько распространённых подходов:

  • Создавать отдельные страницы/записи для каждого языка (например, slug на английском и русском).
  • Использовать пользовательские поля (custom fields) для хранения перевода текста.
  • Хранить переводы в PHP-массиве внутри темы или в отдельных файлах.

Рассмотрим самый простой и универсальный вариант — создавать отдельные записи для каждого языка и связывать их через мета-поля.

Создание структуры с мета-полями для языка и связью

Добавим к страницам или записям пользовательское поле wpmax_lang для указания языка и wpmax_translations с массивом ID связанных переводов.

function wpmax_set_language_meta() {
    // Пример: при сохранении записи можно установить мета
    if ( isset($_POST['post_ID']) && isset($_POST['wpmax_lang']) ) {
        update_post_meta($_POST['post_ID'], 'wpmax_lang', sanitize_text_field($_POST['wpmax_lang']));
    }
}
add_action('save_post', 'wpmax_set_language_meta');

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

Определение текущего языка и переключение

Чтобы сайт понимал, на каком языке показывать страницу, реализуем простой механизм на базе URL, например, с префиксом /en/ или /ru/. В файле functions.php темы добавим функцию:

function wpmax_get_current_language() {
    $uri = $_SERVER['REQUEST_URI'];
    if (strpos($uri, '/en/') === 0) {
        return 'en';
    } elseif (strpos($uri, '/ru/') === 0) {
        return 'ru';
    }
    return 'ru'; // Язык по умолчанию
}

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

Вывод перевода на странице

В шаблоне темы можно добавить логику, которая покажет перевод или ссылку на него. Например, в single.php:

$current_lang = wpmax_get_current_language();
$post_lang = get_post_meta(get_the_ID(), 'wpmax_lang', true);

if ($post_lang !== $current_lang) {
    // Ищем перевод на текущий язык
    $translations = get_post_meta(get_the_ID(), 'wpmax_translations', true); // Массив с ID
    if (!empty($translations)) {
        foreach ($translations as $post_id) {
            $lang = get_post_meta($post_id, 'wpmax_lang', true);
            if ($lang === $current_lang) {
                wp_redirect(get_permalink($post_id));
                exit;
            }
        }
    }
}
// Если перевод не найден, показываем оригинал

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

Как сделать переключатель языка

Переключатель — важная часть интерфейса. Его можно вывести в любом месте темы. Пример кода для вывода ссылок на переводы:

function wpmax_language_switcher() {
    $current_id = get_the_ID();
    $translations = get_post_meta($current_id, 'wpmax_translations', true);
    $current_lang = wpmax_get_current_language();

    $langs = ['ru' => 'Русский', 'en' => 'English'];

    echo '<ul class="wpmax-lang-switcher">';
    foreach ($langs as $code => $label) {
        if ($code === $current_lang) {
            echo "<li><strong>{$label}</strong></li>";
        } else {
            $link = get_permalink($current_id);
            // Ищем перевод для языка
            if (!empty($translations)) {
                foreach ($translations as $post_id) {
                    $lang = get_post_meta($post_id, 'wpmax_lang', true);
                    if ($lang === $code) {
                        $link = get_permalink($post_id);
                        break;
                    }
                }
            }
            echo "<li><a href=\"{$link}\">{$label}</a></li>";
        }
    }
    echo '</ul>';
}

Вставьте wpmax_language_switcher() в шаблон, где хотите видеть языковое меню.

Советы по работе с многоязычностью и SEO

Для лучшего SEO:

  • Используйте канонические URL и указывайте hreflang в <head>.
  • Создавайте отдельные карты сайта для каждого языка.
  • Обеспечьте перевод метаданных и заголовков страниц.

Пример вывода hreflang:

function wpmax_add_hreflang_tags() {
    if (is_singular()) {
        global $post;
        $langs = ['ru', 'en'];
        $urls = [];
        $translations = get_post_meta($post->ID, 'wpmax_translations', true);
        foreach ($langs as $lang) {
            if ($lang === get_post_meta($post->ID, 'wpmax_lang', true)) {
                $urls[$lang] = get_permalink($post->ID);
            } else {
                if (!empty($translations)) {
                    foreach ($translations as $post_id) {
                        if (get_post_meta($post_id, 'wpmax_lang', true) === $lang) {
                            $urls[$lang] = get_permalink($post_id);
                        }
                    }
                }
            }
        }
        foreach ($urls as $lang => $url) {
            echo "<link rel=\"alternate\" hreflang=\"{$lang}\" href=\"{$url}\" />\n";
        }
    }
}
add_action('wp_head', 'wpmax_add_hreflang_tags');

Использование WPShop для перевода и оптимизации

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

Например, WPGPT можно использовать для генерации базового перевода контента, а Clearfy Pro оптимизирует скорость и безопасность сайта.

WooCommerce: как отключить сравнение товаров в личном кабинете
18.05.2026
Как удалить версию WordPress из HTML и REST API для повышения безопасности
26.12.2025
Как удалить пагинацию в WordPress без плагинов
01.12.2025
WooCommerce: как отключить автоматическое обновление статуса заказов
13.06.2026
Как создать автоматический импорт продукции в WooCommerce из CSV файла
02.01.2026