Как сделать чтобы при смене языковой версии сайта редирект шел на ту же страницу?

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

Созданы копии сайта для языковых версий. Как сделать чтобы со страниц при смене языка перекидывало на ту же страницу другого языка? Например https://zeekr66.ru/about/ на https://zeekr66.ru/ch/about/ при нажатии на ссылку https://zeekr66.ru/сn/
Или как это правильнее реализовать?

Дополнительные вопросы

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

<a href="<?= get_home_url( 1, $_SERVER['REQUEST_URI'] ); ?>">RU</a> <a href="<?= get_home_url( 2, $_SERVER['REQUEST_URI'] ); ?>">EN</a> <a href="<?= get_home_url( 3, $_SERVER['REQUEST_URI'] ); ?>">DE</a>

<a href="<?= get_home_url( 1, $_SERVER['REQUEST_URI'] ); ?>">RU</a> <a href="<?= get_home_url( 2, $_SERVER['REQUEST_URI'] ); ?>">EN</a> <a href="<?= get_home_url( 3, $_SERVER['REQUEST_URI'] ); ?>">DE</a>

Ответы:

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

Очевидно подкладывать нужную ссылку.
Ваш КЭП.

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

Как сделать чтобы при смене языковой версии сайта редирект шел на ту же страницу?

Иван Козлов @trampick Веб-разработчик Используй плагин https://wpml.org/ru/

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

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

Заказать помощь
Лучший ответ
1
Никита Орлов Ответ

Правильнее не делать редиректы вручную через $_SERVER['REQUEST_URI'], а хранить связь между переводами страниц. Если у вас просто копии сайта в разных папках или префиксах, WordPress сам не знает, что /about/ и /cn/about/ — это одна и та же страница на разных языках. Поэтому переключатель языка начинает вести на главную или строить кривой URL.

Нормальные варианты:

  • использовать мультиязычный плагин: Polylang, WPML, TranslatePress;
  • если сайт простой и структура полностью совпадает, строить ссылку по текущему URI, но аккуратно обрабатывать основной язык;
  • если структура не совпадает, хранить URL перевода в отдельном поле у каждой страницы.

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

function my_lang_url($lang) {
    $path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
    $path = preg_replace('~^/(cn|en|de)(/|$)~', '/', $path);
 
    if ($lang === 'ru') {
        return home_url($path);
    }
 
    return home_url('/' . $lang . '/' . ltrim($path, '/'));
}

function my_lang_url($lang) { $path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH); $path = preg_replace('~^/(cn|en|de)(/|$)~', '/', $path); if ($lang === 'ru') { return home_url($path); } return home_url('/' . $lang . '/' . ltrim($path, '/')); }

Тогда ссылка на китайскую версию:

echo esc_url(my_lang_url('cn'));

echo esc_url(my_lang_url('cn'));

Но это работает только если у всех языков одинаковые slug. Если на русском /o-kompanii/, а на английском /about/, такой способ сломается. Тогда нужно хранить соответствия переводов.

Если используете Polylang, лучше брать готовую функцию:

$translated_id = pll_get_post(get_the_ID(), 'en');
if ($translated_id) {
    echo esc_url(get_permalink($translated_id));
}

$translated_id = pll_get_post(get_the_ID(), 'en'); if ($translated_id) { echo esc_url(get_permalink($translated_id)); }

Итог: редирект на ту же страницу возможен, но сайт должен знать связь между версиями. Просто склеивать домен и текущий путь можно только на полностью зеркальной структуре.

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

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

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

комментарий

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

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