Проблема многоязычных меню

Вопрос или проблема

Я пытаюсь добавить опцию выбора языка на свой сайт. Я создал свою тему и мне нужно показать веб-сайт на трех разных языках. У меня есть маленькие флаги, и я смог передать переменную php с выбранным языком. С этой переменной я создал условие для назначения wp_nav_menu в header.php. Это действительно работает. Когда я меняю язык, появляется правильное меню на правильном языке. Проблема в том, что когда я нажимаю на элемент меню и открывается выбранная страница, меню пропадает. Исчезает. Может кто-нибудь помочь, пожалуйста? Вот код, который я использую.

В header.php

if ($language == 'en') {
   wp_nav_menu(array(
          'theme_location' => 'eng',
      'container_class' => 'main-nav', 
      'container' => 'nav'
));
} else if ($language == 'de') {
wp_nav_menu(array(
    'theme_location' => 'ger',
    'container_class' => 'main-nav', 
    'container' => 'nav'
));

} else {
wp_nav_menu(array(
    'theme_location' => 'esp',
    'container_class' => 'main-nav', 
    'container' => 'nav'
));
}

И в functions.php

add_theme_support ('menus');
//Создание навигационного меню
if (function_exists ('register_nav_menus')) {
register_nav_menus (array(
                            'esp' => 'Испанское меню',
            'eng' => 'Английское меню',
            'ger' => 'Немецкое меню'
    ));
}

И html для флага ссылки в header.php

<li><a href="http://localhost/wordpress/inicio?language=es" ><img src="http://localhost/wordpress/wp-content/themes/wordpressthemeAPI2/img/espflag.PNG" width="18" height="12" onmouseover="this.src="http://localhost/wordpress/wp-content/themes/wordpressthemeAPI2/img/espH.PNG"" onmouseout="this.src="http://localhost/wordpress/wp-content/themes/wordpressthemeAPI2/img/espflag.PNG""></a></li>

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

Мне не ясно, почему вы регистрируете все меню, когда, вероятно, вам нужно только одно.

Я могу только посоветовать вам использовать плагин, который управляет языками на сайте, существует множество вариантов, которые, вероятно, облегчат вам эту задачу.

Если вы предоставите больше информации или тестовый URL, я с радостью взгляну еще раз.

Удачи,

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

Вот вам ссылка, чтобы посмотреть, что я пытаюсь сделать. Спасибо!

http://ibizaonlinerentals.com/newweb/

Ответ или решение

Доброго времени суток!

Проблема, с которой вы столкнулись, связана с тем, что переменная $language, определяющая выбранный язык, не сохраняется при переходе на новую страницу. В результате при открытии страницы меню по умолчанию отображается на испанском языке. Чтобы решить эту проблему, нужно убедиться, что выбранный язык сохраняется и передается на все страницы вашего сайта.

Вот несколько шагов, которые вы можете предпринять, чтобы исправить это:

  1. Использование сессий для хранения выбранного языка:

    В файле functions.php вы можете инициализировать сессии. Добавьте следующий код:

    session_start();

    Затем, когда пользователь выбирает язык с помощью флага, сохраните этот выбор в сессию:

    if (isset($_GET['language'])) {
       $_SESSION['language'] = $_GET['language'];
    }
  2. Изменение кода в header.php:

    Обновите ваш код в header.php, чтобы он использовал значение языка из сессии, если оно установлено. Если переменной $language нет, используйте значение из сессии:

    $language = isset($_SESSION['language']) ? $_SESSION['language'] : 'es'; // по умолчанию испанский
    
    if ($language == 'en') {
       wp_nav_menu(array(
           'theme_location' => 'eng',
           'container_class' => 'main-nav',
           'container' => 'nav'
       ));
    } elseif ($language == 'de') {
       wp_nav_menu(array(
           'theme_location' => 'ger',
           'container_class' => 'main-nav',
           'container' => 'nav'
       ));
    } else {
       wp_nav_menu(array(
           'theme_location' => 'esp',
           'container_class' => 'main-nav',
           'container' => 'nav'
       ));
    }
  3. Изменение HTML для флажков:

    Убедитесь, что в вашем HTML-коде для флажков правильно передается выбранный язык. Должно выглядеть так:

    <li><a href="?language=es"><img src="http://localhost/wordpress/wp-content/themes/wordpressthemeAPI2/img/espflag.PNG" width="18" height="12" onmouseover="this.src='http://localhost/wordpress/wp-content/themes/wordpressthemeAPI2/img/espH.PNG'" onmouseout="this.src='http://localhost/wordpress/wp-content/themes/wordpressthemeAPI2/img/espflag.PNG'"></a></li>
    <li><a href="?language=en"><img src="http://localhost/wordpress/wp-content/themes/wordpressthemeAPI2/img/engflag.PNG" width="18" height="12" onmouseover="this.src='http://localhost/wordpress/wp-content/themes/wordpressthemeAPI2/img/engH.PNG'" onmouseout="this.src='http://localhost/wordpress/wp-content/themes/wordpressthemeAPI2/img/engflag.PNG'"></a></li>
    <li><a href="?language=de"><img src="http://localhost/wordpress/wp-content/themes/wordpressthemeAPI2/img/gerflag.PNG" width="18" height="12" onmouseover="this.src='http://localhost/wordpress/wp-content/themes/wordpressthemeAPI2/img/gerH.PNG'" onmouseout="this.src='http://localhost/wordpress/wp-content/themes/wordpressthemeAPI2/img/gerflag.PNG'"></a></li>

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

Если у вас есть дополнительные вопросы или возникнут сложности с реализацией, пожалуйста, дайте знать. Удачи в настройке вашего сайта!

Оцените материал
Добавить комментарий

Капча загружается...