Меню 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>

3 ответа

Решение

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

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

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

wp_nav_menu( array( 'theme_location' => 'yourtheme', 'echo' => false ) );

Другие вопросы по тегам