wplang.ru wordpress WP Lang

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

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

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

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

  • Полностью контролировать внешний вид и логику переключения языков;
  • Интегрировать переключатель в любую часть сайта, например, в шапку, футер или боковую панель;
  • Добавлять дополнительные функции, например, автоматическое запоминание выбора языка пользователем;
  • Минимизировать вес и зависимости от плагинов, если необходимо лёгкое решение.

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

Получение списка доступных языков в WordPress

Первое, что нам нужно — получить список языков, которые поддерживаются на вашем сайте. В WordPress по умолчанию нет встроенной мультиязычности, поэтому чаще всего используются плагины. В зависимости от плагина API для получения языков отличается. Ниже пример для Polylang:

function wplang_get_languages_polylang() {
    if ( function_exists('pll_get_the_languages') ) {
        return pll_get_the_languages(array('hide_empty' => 0));
    }
    return array();
}

Эта функция возвращает массив языков с необходимыми данными для вывода, включая slug, имя, код и URL для переключения.

Если вы используете WPML, можно получить языки так:

function wplang_get_languages_wpml() {
    if (defined('ICL_LANGUAGE_CODE')) {
        return apply_filters('wpml_active_languages', NULL, array('skip_missing' => 0));
    }
    return array();
}

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

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

Рассмотрим пример вывода переключателя для Polylang:

function wplang_render_language_switcher() {
    $languages = wplang_get_languages_polylang();
    if (empty($languages)) {
        return;
    }
    echo '<ul class="wplang-language-switcher">';
    foreach ($languages as $lang) {
        $class = $lang['current_lang'] ? 'class="active"' : '';
        echo '<li ' . $class . '><a href="' . esc_url($lang['url']) . '">' . esc_html($lang['name']) . '</a></li>';
    }
    echo '</ul>';
}

Этот код выводит простой список языков с выделением текущего. Чтобы добавить переключатель на сайт, вызовите wplang_render_language_switcher() в нужном шаблоне.

Стилизация переключателя

Для удобства добавим минимальные стили:

.wplang-language-switcher {
    list-style: none;
    display: flex;
    gap: 15px;
}
.wplang-language-switcher li.active a {
    font-weight: bold;
    text-decoration: underline;
}

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

Добавление AJAX для плавного переключения языка

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

PHP: обработчик AJAX-запроса

add_action('wp_ajax_wplang_switch_language', 'wplang_ajax_switch_language');
add_action('wp_ajax_nopriv_wplang_switch_language', 'wplang_ajax_switch_language');
function wplang_ajax_switch_language() {
    $lang = isset($_POST['lang']) ? sanitize_text_field($_POST['lang']) : '';
    if (!$lang) {
        wp_send_json_error('Язык не указан');
    }

    // Пример для Polylang: получить URL на выбранном языке
    if (function_exists('pll_get_post')) {
        $current_post_id = get_the_ID();
        $translated_post_id = pll_get_post($current_post_id, $lang);
        $url = $translated_post_id ? get_permalink($translated_post_id) : home_url('/' . $lang . '/');
    } else {
        $url = home_url('/' . $lang . '/');
    }

    wp_send_json_success(array('url' => $url));
}

JavaScript: отправка запроса и переход

document.querySelectorAll('.wplang-language-switcher a').forEach(function(link) {
    link.addEventListener('click', function(e) {
        e.preventDefault();
        var lang = this.getAttribute('href').split('/').filter(Boolean).pop();

        fetch(wplang_ajax_object.ajax_url, {
            method: 'POST',
            headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
            body: new URLSearchParams({
                action: 'wplang_switch_language',
                lang: lang
            })
        })
        .then(response => response.json())
        .then(data => {
            if (data.success) {
                window.location.href = data.data.url;
            } else {
                alert('Ошибка переключения языка');
            }
        });
    });
});

Для работы этого скрипта нужно локализовать скрипт в functions.php:

wp_localize_script('your-script-handle', 'wplang_ajax_object', array('ajax_url' => admin_url('admin-ajax.php')));

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

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

  • WPGPT — помимо функционала ИИ, поддерживает создание кастомных виджетов, в том числе для языков;
  • Clearfy Pro — оптимизация и расширение возможностей WordPress, включая мультиязычные функции;
  • Expert Review — позволяет создавать пользовательские блоки, которые можно адаптировать под языковой переключатель;
  • Polylang — один из самых популярных плагинов с возможностью настройки переключателя;
  • WPML — мощный мультиязычный плагин с гибкой кастомизацией.

Использование таких плагинов ускорит реализацию и позволит сосредоточиться на дизайне и UX.

Советы по улучшению UX языкового переключателя

При создании переключателя важно помнить следующие моменты:

  • Отображайте текущий язык — пользователь должен видеть, на каком языке он сейчас находится;
  • Используйте флаги с осторожностью — флаги стран не всегда точно отражают языки, лучше текст или иконки;
  • Обеспечьте доступность — переключатель должен быть удобен для всех пользователей, в том числе с клавиатуры и экранных читалок;
  • Сохраняйте выбор языка — с помощью куков или localStorage, чтобы пользователю не приходилось выбирать язык повторно;
  • Оптимизируйте скорость — минимальный вес скриптов и стилей, чтобы переключатель не замедлял загрузку.

Например, сохранение выбора языка в localStorage:

document.querySelectorAll('.wplang-language-switcher a').forEach(function(link) {
    link.addEventListener('click', function(e) {
        localStorage.setItem('wplang_selected_lang', this.getAttribute('href'));
    });
});

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

×
WordPress
дай сайту суперсилу!

Скидки на топовые темы и плагины

Активировать суперсилу ⋙