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

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

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

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

Кроме того, ручной подход помогает лучше понять, как WordPress работает с URL, шаблонами и запросами.

И, конечно, это отличный способ для разработчика улучшить свои навыки работы с WP.

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

1. Использование поддоменов или поддиректорий

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

  • ru.wp24.ru — русский
  • en.wp24.ru — английский

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

2. Использование пользовательских полей и таксономий

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

Например, создадим таксономию language и назначим термины ru и en.

3. Управление URL и переключение языков

Для удобства пользователя важно, чтобы язык отражался в URL, например, /ru/ или /en/. Для этого мы будем использовать фильтр rewrite_rules_array и функцию add_rewrite_rule().

Пример реализации: многоязычность с таксономией и URL-переключением

Шаг 1. Создаем таксономию для языков

add_action('init', 'wp24_register_language_taxonomy');
function wp24_register_language_taxonomy() {
    register_taxonomy('language', 'post', [
        'label' => 'Язык',
        'public' => false,
        'rewrite' => false,
        'hierarchical' => false,
        'show_ui' => true,
        'show_admin_column' => true
    ]);

    // Добавляем термины, если их нет
    if (!term_exists('ru', 'language')) {
        wp_insert_term('Русский', 'language', ['slug' => 'ru']);
    }
    if (!term_exists('en', 'language')) {
        wp_insert_term('English', 'language', ['slug' => 'en']);
    }
}

Этот код создаст таксономию language и два языка.

Шаг 2. Привязываем посты к языкам

При создании или редактировании поста в админке появится выбор языка. Выберите нужный язык для каждой записи.

Шаг 3. Добавляем поддержку URL с языковыми префиксами

add_action('init', 'wp24_add_language_rewrite_rules');
function wp24_add_language_rewrite_rules() {
    add_rewrite_rule('^ru/?$', 'index.php?language=ru', 'top');
    add_rewrite_rule('^en/?$', 'index.php?language=en', 'top');
    add_rewrite_rule('^ru/page/([0-9]{1,})/?$', 'index.php?language=ru&paged=$matches[1]', 'top');
    add_rewrite_rule('^en/page/([0-9]{1,})/?$', 'index.php?language=en&paged=$matches[1]', 'top');
}

add_filter('query_vars', 'wp24_add_language_query_vars');
function wp24_add_language_query_vars($vars) {
    $vars[] = 'language';
    return $vars;
}

add_action('pre_get_posts', 'wp24_filter_posts_by_language');
function wp24_filter_posts_by_language($query) {
    if (!is_admin() && $query->is_main_query() && $lang = get_query_var('language')) {
        $tax_query = [
            [
                'taxonomy' => 'language',
                'field' => 'slug',
                'terms' => $lang
            ]
        ];
        $query->set('tax_query', $tax_query);
    }
}

Этот код добавляет правила перезаписи URL и фильтрует посты по языку.

Шаг 4. Создаем переключатель языков

Добавим простой переключатель языков в тему:

function wp24_language_switcher() {
    $current_lang = get_query_var('language') ?: 'ru';
    $langs = [
        'ru' => 'Русский',
        'en' => 'English'
    ];
    echo '<div class="wp24-language-switcher">';
    foreach ($langs as $slug => $name) {
        $class = ($slug === $current_lang) ? 'active' : '';
        $url = home_url('/' . $slug . '/');
        echo "<a href=\"$url\" class=\"$class\">$name</a> ";
    }
    echo '</div>';
}

Выводите wp24_language_switcher() в нужном месте темы, например, в шапке.

Как адаптировать эту систему для страниц и других типов записей

Чтобы расширить функционал, можно добавить поддержку других типов записей (страниц, пользовательских типов), и таксономий. Для этого нужно изменить аргументы в register_taxonomy() и внести коррективы в фильтр pre_get_posts.

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

Преимущества и недостатки данного подхода

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

  • Минимум нагрузки на сайт
  • Полный контроль над логикой
  • Отсутствие зависимости от сторонних плагинов

Недостатки:

  • Отсутствие автоматизации перевода
  • Меньше функций из коробки (например, SEO для каждого языка придется настраивать вручную)
  • Требуется больше ручной работы и знаний

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

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

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

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

Итог

Создание многоязычного сайта на WordPress без использования плагинов — вполне реальная задача, требующая понимания внутренней архитектуры WordPress и умения работать с таксономиями, запросами и перезаписью URL. Этот способ отлично подойдет для проектов с ограниченным количеством языков и небольшим объемом контента.

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

Как удалить пустые варианты атрибутов в WooCommerce с помощью кода
30.04.2026
Как автоматически удалять пустые категории в WordPress с помощью кода
29.03.2026
Как создать простой шорткод в WordPress с применением WP24
13.11.2025
Как добавить автоматическое удаление неиспользуемых медиафайлов в WordPress
03.04.2026
Как установить уникальные метаданные для страниц WordPress
17.12.2025