Как сделать переключатель языков в коде, на Polylang?

Ссылка скопирована
1 ответ

Мне нужно сделать переключатель языков на сайте на wp, код фронта на скрине и вид его тоже, какая должна быть php часть чтобы он работал не понимаю, никакие туторы не помогли

Как сделать переключатель языков в коде, на Polylang?

Как сделать переключатель языков в коде, на Polylang?

Дополнительно:

Нарушение правил 3.8 и 5.12

можете взять за основу и переделать под свой внешний вид
https://qna.habr.com/q/688307

  • Оно не работает чего-то, даже без стилей и т.д.
  • Bogdan Bukievskiy, ну если вы не напишите какая ошибка при попытке запустить, то и посоветовать ничего не получится

Ответы:

Что именно из документации плагина не понятно?
https://polylang.pro/doc/the-language-switcher/

Визуально можно сделать как угодно при помощи html и css, но с этим плагином, скорее всего, такого html кода у вас не будет.

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Андрей PHP Ответ

В Polylang не нужно вручную собирать ссылки на языки через свои SQL-запросы. У плагина есть функция pll_the_languages(), которая умеет вернуть массив языков. Его удобно использовать для кастомного переключателя в шапке или меню.

Пример вывода своего HTML:

if (function_exists('pll_the_languages')) {
    $languages = pll_the_languages([
        'raw' => 1,
        'hide_if_empty' => 0,
    ]);
 
    if (!empty($languages)) {
        echo '<ul class="lang-switcher">';
 
        foreach ($languages as $lang) {
            $class = !empty($lang['current_lang']) ? ' is-active' : '';
            echo '<li class="lang-switcher__item' . esc_attr($class) . '">';
            echo '<a href="' . esc_url($lang['url']) . '" hreflang="' . esc_attr($lang['locale']) . '">';
            echo esc_html(strtoupper($lang['slug']));
            echo '</a>';
            echo '</li>';
        }
 
        echo '</ul>';
    }
}

if (function_exists('pll_the_languages')) { $languages = pll_the_languages([ 'raw' => 1, 'hide_if_empty' => 0, ]); if (!empty($languages)) { echo '<ul class="lang-switcher">'; foreach ($languages as $lang) { $class = !empty($lang['current_lang']) ? ' is-active' : ''; echo '<li class="lang-switcher__item' . esc_attr($class) . '">'; echo '<a href="' . esc_url($lang['url']) . '" hreflang="' . esc_attr($lang['locale']) . '">'; echo esc_html(strtoupper($lang['slug'])); echo '</a>'; echo '</li>'; } echo '</ul>'; } }

CSS:

.lang-switcher {
    display: flex;
    gap: 8px;
    list-style: none;
    padding: 0;
    margin: 0;
}
 
.lang-switcher a {
    display: inline-flex;
    padding: 6px 10px;
    border-radius: 6px;
    text-decoration: none;
}
 
.lang-switcher .is-active a {
    background: #1f6bff;
    color: #fff;
}

.lang-switcher { display: flex; gap: 8px; list-style: none; padding: 0; margin: 0; } .lang-switcher a { display: inline-flex; padding: 6px 10px; border-radius: 6px; text-decoration: none; } .lang-switcher .is-active a { background: #1f6bff; color: #fff; }

Если используете кэш, проверьте, что ссылки не кэшируются неправильно между языками. И не забывайте: переключатель языка должен вести на перевод текущей страницы, если он есть. Polylang сам отдаёт правильный URL в массиве raw.

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

Также проверьте hreflang в исходном коде. Переключатель языка в шапке — это только навигация для пользователя, а поисковикам нужны корректные альтернативные языковые URL. Polylang обычно выводит их сам, если переводы связаны между собой.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно