为什么‘wp_NAV_MENU’功能只有在菜单创建之前才起作用?

时间:2017-03-03 作者:Gibrán

我正在尝试为wordpress创建一个主题,所以我已经完成了一个干净的安装。我没有创建条目、页面或菜单。

此时,我正在创建菜单,因此我在functions.php 归档以下函数:

<?php register_nav_menus( array(
  \'menu\' => \'Menu superior\',)); ?>
并在我的header.php 我是这样实现的:

<!-- Menu -->
<nav id="menu">  
    <h2>Menu</h2>      
    <?php wp_nav_menu(array(
    \'container\' => false, 
    \'items_wrap\' => \'<ul> %3$s</ul>\', 
    \'theme_location\' => \'menu\', 
    )); ?>
</nav>
我意识到,当我运行它时,它并没有给我它添加到我的元素的样式,这些元素是已经创建的页面,在这种情况下是在安装中生成的页面。到目前为止,它看起来是这样的:Sin menu creado manualmente

然后我转到菜单部分,通过添加元素手动创建了一个菜单。我注意到菜单按照我的要求出现:

enter image description here

这里的问题是,如果我将我的主题提供给那些安装了wordpress的用户,但他们仍然没有创建菜单,那么当我的菜单添加div 容器到菜单。在那一刻之前创建的页面将被添加,但没有样式。我是否必须向那些获得它的人指定,他们首先必须创建一个菜单,以便应用该样式?或者你能做一些形式,这样从一开始你就可以正确地看到它的风格吗?

我感谢你的帮助!(抱歉,我不得不使用翻译)

SOLUTION

我已解决如下问题:

    <!-- Menu -->
    <nav id="menu">  
        <h2>Menu</h2>      
        <?php 
        if ( has_nav_menu( \'menu\' ) ) {
            wp_nav_menu(array(
                \'container\' => false, 
                \'items_wrap\' => \'<ul> %3$s</ul>\', 
                \'theme_location\' => \'menu\', 
                ));
        }else{
            echo "<ul>";
            wp_list_pages(\'title_li=\');
            echo "</ul>";
        }
        ?>
    </nav>
正如Milo所提到的,我必须检查菜单是否仍然不存在才能执行特定操作。

1 个回复
最合适的回答,由SO网友:Milo 整理而成

这是由于wp_nav_menu 参数fallback_cb:

如果菜单不存在,将启动回调函数。默认值为“wp\\u page\\u menu”。设置为false表示无回退。

您尚未指定备选方案,因此它使用默认值,wp_page_menu.

您可以创建自己的函数来显示带有适当标记的页面菜单,或者设置fallback_cb 参数到false 不显示任何内容。

has_nav_menu 当菜单不可用时,也可能有助于显示备用标记。

相关推荐

如何在WordPress中使用html和css定制帖子?

我试图在Internet和stackoverflow上查找信息,但什么都没有。因此,我已经将我的网站(html、css、js)迁移到WordPress(index.php、header.php、footer.php等),在将帖子添加到我的网站之前,我不知道如何更改帖子的视图。我可以看到四种方法:1) 下载WP插件以添加和自定义帖子。但我只能使用管理区域进行自定义,我不能使用HTML和CSS,选项很少(颜色、图片等)2) 创建一个单独的文件(sidebar.php)并将我的帖子添加到其中。但如果我的客户想自