wplang.ru wordpress WP Lang

Как сделать многоязычное меню в WordPress с помощью пользовательских функций

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

Почему стоит создавать многоязычное меню вручную

Готовые плагины для мультиязычности, например WPML или Polylang, обеспечивают удобство, но иногда создают избыточную нагрузку и сложность. Если вам нужно сделать только переключение меню на несколько языков или собственную логику отображения, проще и эффективнее реализовать это кодом.

Плюсы ручного решения:

  • Легковесность — не нагружаете сайт лишними плагинами.
  • Гибкость — можно реализовать особые сценарии, например, показывать разные пункты меню в зависимости от языка.
  • Понимание кода — вы контролируете весь процесс.

Недостаток — немного больше работы, чем при установке готового решения.

Основные подходы к реализации многоязычного меню

Существует несколько способов организации многоязычного меню в WordPress без использования плагинов:

  1. Создание отдельных меню для каждого языка. В админке WordPress вы создаёте несколько меню, например, "Меню Рус" и "Menu English". Затем в шаблоне выводите нужное меню в зависимости от текущего языка.
  2. Использование пользовательских таксономий или меток для пунктов меню. Можно пометить пункты меню специальным атрибутом и фильтровать их вывод.
  3. Динамическое создание меню из массива переводов. Для небольших сайтов можно хранить меню в коде и выводить нужный вариант.

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

Создаем меню в админке для каждого языка

Перейдите в Внешний вид → Меню и создайте, например, два меню:

  • "Меню Русский" — с пунктами на русском языке
  • "Menu English" — с пунктами на английском языке

Добавьте в каждое меню соответствующие страницы, категории и ссылки.

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

Чтобы переключать меню, нужно понимать, на каком языке сейчас отображается страница. Если у вас нет плагина для мультиязычности, можно определить язык по URL или сессии. Например, если URL сайта имеет вид example.com/en/ или example.com/ru/, то можно написать функцию для извлечения языка.

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

Этот простой пример проверяет префикс пути. В реальных проектах лучше делать более надежный парсинг.

Вывод меню в шаблоне с выбором языка

Теперь мы можем написать функцию, которая вызовет нужное меню в зависимости от языка.

function wplang_the_language_menu() {
    $lang = wplang_get_current_language();
    if ($lang === 'en') {
        wp_nav_menu(array('theme_location' => 'menu-english'));
    } else {
        wp_nav_menu(array('theme_location' => 'menu-russian'));
    }
}

Для этого нужно зарегистрировать эти меню в functions.php:

function wplang_register_menus() {
    register_nav_menus(array(
        'menu-russian' => 'Русское меню',
        'menu-english' => 'English Menu',
    ));
}
add_action('init', 'wplang_register_menus');

После этого в шаблоне (например, header.php) вызовите функцию wplang_the_language_menu();, чтобы отобразить меню под текущий язык.

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

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

Можно сделать блок переключения языков в header.php:

function wplang_language_switcher() {
    $current_lang = wplang_get_current_language();
    echo '<div class="wplang-switcher">';
    echo $current_lang === 'ru' ? '<strong>Русский</strong> | ' : '<a href="/ru/">Русский</a> | ';
    echo $current_lang === 'en' ? '<strong>English</strong>' : '<a href="/en/">English</a>';
    echo '</div>';
}

Добавьте вызов wplang_language_switcher(); в нужное место шаблона.

Автоматическое переключение меню через AJAX

Если хотите сделать переключение без перезагрузки страницы, можно добавить AJAX-обработчик. Пример упрощённого варианта:

add_action('wp_ajax_wplang_switch_menu', 'wplang_ajax_switch_menu');
add_action('wp_ajax_nopriv_wplang_switch_menu', 'wplang_ajax_switch_menu');

function wplang_ajax_switch_menu() {
    $lang = isset($_POST['lang']) ? sanitize_text_field($_POST['lang']) : 'ru';
    ob_start();
    if ($lang === 'en') {
        wp_nav_menu(array('theme_location' => 'menu-english'));
    } else {
        wp_nav_menu(array('theme_location' => 'menu-russian'));
    }
    $menu_html = ob_get_clean();
    wp_send_json_success(array('menu' => $menu_html));
}

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

Использование плагина Clearfy Pro для оптимизации мультиязычности

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

Выводы и рекомендации

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

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

×
Оптимизируй свой сайт!

Скидка -15% на премиум плагин Clearfy Pro

Купить плагин сейчас ⋙