Если пользователь переходит на страницу, отличную от домашней, мой заголовок меняет макет.
Все отлично работает кроме функции wp_nav_menu
,
Сначала я проверяю, находится ли пользователь на главной странице или нет. В зависимости от этого результата пользователю показывается один из двух заголовков.
Вот код:
<?php
$menu = wp_nav_menu( array( 'theme_location' => 'hoofdmenu' ) );
echo is_front_page() ? '' : '
<header>
<div class="hoofdmenu">
<div class="hamburger">
<a href="#" id="click-a"><img width="80" height="80" src="'.get_bloginfo('template_directory').'/images/hamburger.png"></a>
</div>
'.$menu.'
</div>
</header>';
?>
Короче говоря, я удалил true
значение if
заявление.
Теперь у меня проблема в том, что меню находится полностью вне header
Вот вывод HTML:
<div class="menu-hoofdmenu-container">
<ul id="menu-hoofdmenu" class="menu">
<li>Menu item 1</li>
<li>Menu item 2</li>
<li>Menu item 3</li>
</ul>
</div>
<header>
<div class="hoofdmenu">
<div class="hamburger">
<a href="#" id="click-a"><img width="80" height="80" src="http://www.url.nl/wp-content/themes/themename/images/hamburger.png"></a>
</div>
</div>
</div>
</header>
Любые мысли о том, почему wp_nav_menu
находится вне header
?
——-Обновить———
echo is_front_page() ? '' : '
<header>
<div class="hoofdmenu">
<div class="hamburger">
<a href="#" id="click-a"><img width="80" height="80" src="'.get_bloginfo('template_directory').'/images/hamburger.png"></a>
</div>
'.wp_nav_menu( array( 'theme_location' => 'hoofdmenu' ) ).'
</div>
</header>
(Добавлено обновление внизу ответа, вы можете пропустить первую часть)
Согласно Документы, функция отображает (echo
) меню и не возвращает.
wp_nav_menu (массив $ args = array ())
Отображает меню навигации.
Поэтому, когда вы используете
$menu = wp_nav_menu( array( 'theme_location' => 'hoofdmenu' ) );
Вы фактически печатаете меню, а не сохраняете его в $menu
переменная и, следовательно, она печатается до кода заголовка.
Решение будет:
echo is_front_page() ? '' : '
<header>
<div class="hoofdmenu">
<div class="hamburger">
<a href="#" id="click-a"><img width="80" height="80" src="'.get_bloginfo('template_directory').'/images/hamburger.png"></a>
</div>
'.wp_nav_menu( array( 'theme_location' => 'hoofdmenu' ) ).'
</div>
</header>';
ОБНОВИТЬ:
Попробуйте следующее:
if(!is_front_page()){
echo '<header>
<div class="hoofdmenu">
<div class="hamburger">
<a href="#" id="click-a"><img width="80" height="80" src="'.get_bloginfo('template_directory').'/images/hamburger.png"></a>
</div>';
wp_nav_menu( array( 'theme_location' => 'hoofdmenu' ) );
echo '
</div>
</header>';
}
Лучшее обновление:
Используйте тот же код, который вы использовали, просто добавьте опцию ‘echo’ в массив args.
Кажется, что вы можете сказать функции возвращать вывод вместо его печати.
‘echo’ (bool) Отобразить ли меню или вернуть его. По умолчанию верно.
Использование:
$menu = wp_nav_menu( array( 'theme_location' => 'hoofdmenu', 'echo' => false) );
Простое решение Дайте эхо ложь и ваш код будет работать.
Из WP Docs.
//'echo'
//(bool) Whether to echo the menu or return it. Default true.
$menu = wp_nav_menu( array( 'theme_location' => 'hoofdmenu', 'echo' => false ) );