Как сделать чтобы при смене языковой версии сайта редирект шел на ту же страницу?
Созданы копии сайта для языковых версий. Как сделать чтобы со страниц при смене языка перекидывало на ту же страницу другого языка? Например 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/
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

Правильнее не делать редиректы вручную через
$_SERVER['REQUEST_URI'], а хранить связь между переводами страниц. Если у вас просто копии сайта в разных папках или префиксах, WordPress сам не знает, что/about/и/cn/about/— это одна и та же страница на разных языках. Поэтому переключатель языка начинает вести на главную или строить кривой 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, '/')); }
Тогда ссылка на китайскую версию:
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)); }
Итог: редирект на ту же страницу возможен, но сайт должен знать связь между версиями. Просто склеивать домен и текущий путь можно только на полностью зеркальной структуре.