WordPress 菜单放在 header 之外

WordPress menu is placed outside the header

如果用户转到主页以外的页面,那么我的 header 会更改布局。

除函数 wp_nav_menu.

外,一切正常

首先,我检查用户是否在主页上。根据该结果,向用户显示两个 header 之一。

代码如下:

<?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>';
?>

为了简短起见,我删除了 if 语句的 true 值。

现在我遇到的问题是菜单完全放在 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>

(在答案底部添加了更新,您可以跳过第一部分)

根据 Docs,函数显示 (echo) 菜单,不 return

wp_nav_menu( array $args = array() )

Displays a navigation menu.

因此,当您使用

$menu = wp_nav_menu( array( 'theme_location' => 'hoofdmenu' ) );

您实际打印菜单而不是将其保存在 $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>';

更新:

尝试以下操作:

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 数组。 看来您可以告诉函数 return 输出而不是打印它。

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

用法:

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

简单的解决方案。给 echo false ,你的代码就会工作。 来自 WP 文档。

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

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