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

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

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

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

Основные преимущества ручного подхода:

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

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

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

1. Отдельные страницы и записи для каждого языка

Самый простой способ — создавать отдельные версии страниц и записей для каждого языка, например, с префиксом в URL: example.com/en/, example.com/ru/. Для этого потребуется добавить пользовательское поле или таксономию, указывающую язык контента.

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

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

Если объем контента небольшой, допустимо хранить переводы непосредственно в массивах PHP и выводить нужный текст в зависимости от выбранного языка.

Это удобно для статичных элементов: заголовков, меню, кнопок.

3. Вариант с поддоменами или поддиректориями

Использование поддоменов (en.example.com) или поддиректорий (example.com/en/) — популярный SEO-дружественный способ организации мультиязычности.

Для этого нужно настроить .htaccess или роутинг WordPress, чтобы корректно обрабатывать запросы и переключать языки.

Практическая реализация мультиязычности с пользовательским полем

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

1. Добавление пользовательского поля языка

При создании или редактировании записи в админке добавьте метаполе language со значением, например, ru или en.

2. Функция для вывода текущего языка из URL

function wpaction_get_current_language() {
  $uri = trim($_SERVER['REQUEST_URI'], '/');
  $segments = explode('/', $uri);
  $lang = $segments[0] ?? 'ru'; // По умолчанию русский
  $allowed_langs = ['ru', 'en'];
  return in_array($lang, $allowed_langs) ? $lang : 'ru';
}

3. Модификация основного запроса для вывода записей нужного языка

В файле functions.php добавьте фильтр, чтобы показывать записи с нужным языком:

function wpaction_filter_posts_by_language($query) {
  if (is_admin() || !$query->is_main_query()) {
    return;
  }
  $current_lang = wpaction_get_current_language();
  $meta_query = [
    [
      'key' => 'language',
      'value' => $current_lang,
      'compare' => '=',
    ],
  ];
  $query->set('meta_query', $meta_query);
}
add_action('pre_get_posts', 'wpaction_filter_posts_by_language');

4. Настройка постоянных ссылок для языка

Чтобы в URL был префикс языка, добавьте правило в файл .htaccess или используйте фильтр request, чтобы WordPress понимал URL с языковым префиксом.

Переключатель языка и сохранение языка в сессии

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

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

function wpaction_language_switcher() {
  $current_lang = wpaction_get_current_language();
  $langs = ['ru' => 'Русский', 'en' => 'English'];
  echo '<ul class="language-switcher">';
  foreach ($langs as $code => $name) {
    $class = ($code === $current_lang) ? 'active' : '';
    $url = '/' . $code . '/';
    echo "<li class='$class'><a href='$url'>$name</a></li>";
  }
  echo '</ul>';
}

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

Сохранение выбранного языка в сессии

Чтобы запомнить язык, можно использовать сессию PHP:

function wpaction_start_session() {
  if (!session_id()) {
    session_start();
  }
}
add_action('init', 'wpaction_start_session', 1);

function wpaction_save_language_session() {
  if (isset($_GET['lang'])) {
    $_SESSION['language'] = $_GET['lang'];
  }
}
add_action('init', 'wpaction_save_language_session');

function wpaction_get_current_language() {
  if (!session_id()) {
    session_start();
  }
  if (isset($_SESSION['language'])) {
    return $_SESSION['language'];
  }
  return 'ru';
}

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

Перевод интерфейсных элементов с помощью массива

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

$wpaction_translations = [
  'ru' => [
    'read_more' => 'Читать далее',
    'comments' => 'Комментарии',
  ],
  'en' => [
    'read_more' => 'Read more',
    'comments' => 'Comments',
  ],
];

function wpaction_translate($key) {
  global $wpaction_translations;
  $lang = wpaction_get_current_language();
  return $wpaction_translations[$lang][$key] ?? $key;
}

Используйте функцию wpaction_translate('read_more') в шаблонах для вывода перевода.

Заключение

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

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

Как удалить заблокированные пользователи из WordPress
09.12.2025
Оптимизация кода WordPress: как найти и удалить неиспользуемые хуки
24.01.2026
Как автоматизировать создание резервных копий WordPress без плагинов
01.02.2026
Как создать мультиязычный сайт на WordPress без плагинов
17.01.2026
Как создать динамические таблицы в WordPress с помощью шорткода
17.12.2025