Меню WordPress находится за пределами заголовка

Если пользователь переходит на страницу, отличную от домашней, мой заголовок меняет макет.

Все отлично работает кроме функции 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>

2

Решение

(Добавлено обновление внизу ответа, вы можете пропустить первую часть)

Согласно Документы, функция отображает (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) );
5

Другие решения

Простое решение Дайте эхо ложь и ваш код будет работать.
Из WP Docs.

//'echo'
//(bool) Whether to echo the menu or return it. Default true.

$menu = wp_nav_menu( array( 'theme_location' => 'hoofdmenu', 'echo' => false ) );
1

По вопросам рекламы [email protected]