wp-kurs.ru wordpress WP-Kurs

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

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

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

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

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

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

  • Организация структуры URL для разных языков
  • Хранение переведенного контента
  • Переключение языков на сайте
  • Обеспечение SEO-оптимизации
  • Обработка форм и пользовательских данных на нескольких языках

Структура URL и настройка .htaccess

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

  • example.com/ru/ — русский
  • example.com/en/ — английский

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

Пример базового правила .htaccess для подкаталогов языка:

# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^ru/(.*)$ index.php?lang=ru&name=$1 [QSA,L]
RewriteRule ^en/(.*)$ index.php?lang=en&name=$1 [QSA,L]
# END WordPress

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

Хранение и вывод переводов контента

Самый простой способ — использовать кастомные поля для хранения перевода постов и страниц. Например, для каждого языка создаём поле с суффиксом: title_en, title_ru, content_en, content_ru.

В шаблоне темы WordPress нужно получить язык из параметра URL и вывести соответствующие поля. Пример функции для определения языка и вывода контента:

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

function wp_kurs_get_translated_field($post_id, $field_base) {
    $lang = wp_kurs_get_current_lang();
    $field_name = $field_base . '_' . $lang;
    $value = get_post_meta($post_id, $field_name, true);
    if (!$value) {
        $value = get_post_meta($post_id, $field_base . '_ru', true); // fallback
    }
    return $value;
}

В файле шаблона single.php можно вывести заголовок и контент так:

$title = wp_kurs_get_translated_field(get_the_ID(), 'title');
echo '<h1>' . esc_html($title) . '</h1>';
$content = wp_kurs_get_translated_field(get_the_ID(), 'content');
echo wp_kses_post($content);

Создание переключателя языков

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

Пример простой функции для вывода переключателя:

function wp_kurs_language_switcher() {
    $current_lang = wp_kurs_get_current_lang();
    $url = home_url(add_query_arg(null, null));
    $url_ru = preg_replace('/([?&])lang=en(&|$)/', '$1', $url);
    $url_en = add_query_arg('lang', 'en', $url_ru);

    echo '<nav class="language-switcher">';
    echo '<a href="' . esc_url($url_ru) . '"' . ($current_lang == 'ru' ? ' class="active"' : '') . '>Русский</a> | ';
    echo '<a href="' . esc_url($url_en) . '"' . ($current_lang == 'en' ? ' class="active"' : '') . '>English</a>';
    echo '</nav>';
}

Вызовите wp_kurs_language_switcher() в нужном месте темы, например в header.php.

SEO и мета-теги для многоязычности

Важно не забывать про SEO-аспекты:

  • Используйте теги hreflang для указания поисковикам языковых версий.
  • Добавляйте уникальные мета-теги и заголовки для каждой языковой версии.
  • Не дублируйте контент, используйте canonical для основной версии.

Пример добавления hreflang в header.php:

function wp_kurs_add_hreflang() {
    $current_url = home_url(add_query_arg(null, null));
    $url_ru = preg_replace('/([?&])lang=en(&|$)/', '$1', $current_url);
    $url_en = add_query_arg('lang', 'en', $url_ru);
    echo '<link rel="alternate" hreflang="ru" href="' . esc_url($url_ru) . '" />';
    echo '<link rel="alternate" hreflang="en" href="' . esc_url($url_en) . '" />';
}
add_action('wp_head', 'wp_kurs_add_hreflang');

Управление переводами форм и пользовательских данных

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

$form_texts = [
    'ru' => [
        'submit' => 'Отправить',
        'name' => 'Имя',
        'email' => 'Электронная почта',
    ],
    'en' => [
        'submit' => 'Submit',
        'name' => 'Name',
        'email' => 'Email',
    ],
];
$lang = wp_kurs_get_current_lang();
$submit_text = $form_texts[$lang]['submit'];

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

Преимущества и недостатки самостоятельной реализации

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

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

Недостатки:

  • Необходимость ручного добавления переводов
  • Отсутствие удобного интерфейса для переводчиков
  • Требует навыков программирования и поддержки

Заключение

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

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

×
Делай сайт лучше!!

-20% на премиум темы и плагины

Использовать скидку ⋙