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

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

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

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

  • Увеличивают нагрузку на сайт и базу данных.
  • Могут конфликтовать с другими плагинами и темами.
  • Иногда слишком сложны для простых сайтов с 2-3 языками.

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

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

Основная идея — использовать разные страницы и записи для каждой языковой версии и переключать их через меню или ссылки. Рассмотрим ключевые аспекты:

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

Для каждого языка создаем отдельные страницы или записи в админке. Например, для страницы «О компании» создаем две страницы: «О компании» (русский) и «About Us» (английский).

Рекомендуется придерживаться единой структуры URL, например:

  • /ru/o-kompanii/ — русская версия
  • /en/about-us/ — английская версия

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

2. Добавление языковых префиксов в URL

Чтобы WordPress корректно обрабатывал разные языки, добавим префиксы ru и en в URL. Это можно сделать с помощью настройки постоянных ссылок и дополнительных правил в файле .htaccess или функциях темы.

Пример добавления префикса языка в начале URL для страниц:

function wpgen_add_language_prefix() {
  $lang = '';
  if ( isset($_GET['lang']) ) {
    $lang = sanitize_text_field($_GET['lang']);
  } else {
    $lang = 'ru'; // язык по умолчанию
  }
  return $lang;
}

function wpgen_language_rewrite_rules() {
  add_rewrite_rule('^ru/(.+)/?$', 'index.php?pagename=$matches[1]&lang=ru', 'top');
  add_rewrite_rule('^en/(.+)/?$', 'index.php?pagename=$matches[1]&lang=en', 'top');
}
add_action('init', 'wpgen_language_rewrite_rules');

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

3. Вывод контента в зависимости от языка

В шаблонах темы можно проверять текущий язык и выводить соответствующие материалы. Например, использовать URL или параметр $_GET['lang'] для определения языка.

function wpgen_get_current_lang() {
  if ( isset($_GET['lang']) && in_array($_GET['lang'], ['ru','en']) ) {
    return $_GET['lang'];
  }
  return 'ru'; // язык по умолчанию
}

$current_lang = wpgen_get_current_lang();

if ($current_lang === 'ru') {
  // вывод русской версии
} else {
  // вывод английской версии
}

Переключатель языков: удобный UX

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

Пример кода для вывода переключателя в шаблоне:

function wpgen_language_switcher() {
  $current_url = $_SERVER['REQUEST_URI'];
  $ru_url = preg_replace('#^/en/#', '/ru/', $current_url);
  $en_url = preg_replace('#^/ru/#', '/en/', $current_url);
  echo '<nav class="language-switcher">';
  echo '<a href="' . esc_url($ru_url) . '">Русский</a> | ';
  echo '<a href="' . esc_url($en_url) . '">English</a>';
  echo '</nav>';
}

Вставьте вызов wpgen_language_switcher() в нужное место шаблона, например, в шапку сайта.

Работа с меню и навигацией для разных языков

Рекомендуется создавать отдельные меню для каждого языка в админке WordPress. В шаблонах выводить меню в зависимости от текущего языка:

function wpgen_get_menu_location($lang) {
  return $lang === 'ru' ? 'primary-ru' : 'primary-en';
}

$current_lang = wpgen_get_current_lang();
wp_nav_menu(array('theme_location' => wpgen_get_menu_location($current_lang)));

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

Пример: создание пользовательского типа записей для переводов

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

function wpgen_add_language_meta_box() {
  add_meta_box('wpgen_lang_meta', 'Язык записи', 'wpgen_lang_meta_box_callback', 'post', 'side');
}
add_action('add_meta_boxes', 'wpgen_add_language_meta_box');

function wpgen_lang_meta_box_callback($post) {
  $value = get_post_meta($post->ID, '_wpgen_lang', true);
  ?>
  <label for="wpgen_lang_field">Язык:</label>
  <select name="wpgen_lang_field" id="wpgen_lang_field">
    <option value="ru" <?php selected( $value, 'ru' ); ?>>Русский</option>
    <option value="en" <?php selected( $value, 'en' ); ?>>English</option>
  </select>
  <?php
}

function wpgen_save_language_meta($post_id) {
  if (array_key_exists('wpgen_lang_field', $_POST)) {
    update_post_meta($post_id, '_wpgen_lang', sanitize_text_field($_POST['wpgen_lang_field']));
  }
}
add_action('save_post', 'wpgen_save_language_meta');

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

$current_lang = wpgen_get_current_lang();
$query = new WP_Query(array(
  'meta_key' => '_wpgen_lang',
  'meta_value' => $current_lang,
  'post_type' => 'post'
));
while ($query->have_posts()) {
  $query->the_post();
  the_title();
  // и т.д.
}
wp_reset_postdata();

SEO-аспекты многоязычности без плагинов

Чтобы поисковики корректно индексировали разные языковые версии, нужно:

  • Добавить в <head> теги hreflang для каждой версии.
  • Использовать правильные URL с языковыми префиксами.
  • Создавать sitemap с ссылками на все языковые версии.

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

<link rel="alternate" hreflang="ru" href="https://example.com/ru/" />
<link rel="alternate" hreflang="en" href="https://example.com/en/" />

Заключение

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

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

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

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

Как удалить загруженные файлы в WordPress после удаления плагинов
21.01.2026
Автоматическое возврат средств при отмене заказа в WooCommerce: практическое руководство
30.05.2026
Как создать функцию автоматического удаления старых записей через WP-Cron в WordPress
07.01.2026
Как добавить автоматическое сохранение данных в формах WordPress
27.02.2026
Как добавить поле в форму регистрации WordPress с помощью плагинов и кода
17.01.2026