如果未选择菜单,则忽略wp_NAV_MENU中的参数/更改标记

时间:2011-10-25 作者:Dunhamzzz

我在我的主题中使用wp\\u nav\\u菜单创建了一个菜单,使用了尽可能简单的设置:

wp_nav_menu( array( \'theme_location\' => \'my_theme_top_menu\') );
在我的职能中。php:

register_nav_menus(
    array(\'my_theme_top_menu\' => \'Top Menu\' )
);
然而,当用户在wp admin中创建菜单并将其分配给此菜单时,我遇到了奇怪的行为。首次选择主题时,默认为从页面构建的默认菜单,标记如下所示:

<div class="menu">
    <ul>
       <li class="page_item page-item-51">
           <a href="http://www.mdunham.co.uk/bligs/">About Us</a>
但是,如果用户选择其中一个预定义菜单,则构建菜单的标记将完全更改:

 <div class="menu-main-menu-container">
    <ul id="menu-main-menu" class="menu">
           <li id="menu-item-102" class="menu-item menu-item-type-post_type menu-item-object-page current-menu-item page_item page-item-29 current_page_item menu-item-102">
               <a href="http://www.site.co.uk/">Home</a></li>
为什么会这样?这就像当使用定义的菜单时,它是默认的WP菜单(或我定义的设置),但当没有定义的菜单时,它会后退,它会使用一组不同的、非标准化的选项,而我自己实际上并没有设置这些选项。

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

以下是的默认用法wp_nav_menu():

<?php 
$defaults = array(
  \'theme_location\'  => ,
  \'menu\'            => , 
  \'container\'       => \'div\', 
  \'container_class\' => \'menu-{menu slug}-container\', 
  \'container_id\'    => ,
  \'menu_class\'      => \'menu\', 
  \'menu_id\'         => ,
  \'echo\'            => true,
  \'fallback_cb\'     => \'wp_page_menu\',
  \'before\'          => ,
  \'after\'           => ,
  \'link_before\'     => ,
  \'link_after\'      => ,
  \'items_wrap\'      => \'<ul id=\\"%1$s\\" class=\\"%2$s\\">%3$s</ul>\',
  \'depth\'           => 0,
  \'walker\'          => 
);
?>
请注意wp_nav_menu()wp_page_menu(), 默认值为:

<?php 
$args = array(
\'sort_column\' => \'menu_order, post_title\',
\'menu_class\'  => \'menu\',
\'include\'     => \'\',
\'exclude\'     => \'\',
\'echo\'        => true,
\'show_home\'   => false,
\'link_before\' => \'\',
\'link_after\'  => \'\' 
);
?>
这些应该以相同的页面集产生相同的输出。但是,如果您需要更具体的控制,您有几个选项:

在此处指定自定义回调:

\'fallback\\u cb\'=>\'mytheme\\u wp\\u nav\\u menu\\u cb\'

。。。然后,定义:

  function mytheme_wp_nav_menu_cb() {
      // Output whatever menu you want here
  }
。。。这样您就可以覆盖wp_page_menu()

将您的wp_nav_menu() 打电话进来has_nav_menu() 有条件的:

if ( has_nav_menu( \'my_theme_top_menu\' ) ) {
    // User has applied a custom menu
    // to the my_theme_top_menu location;
    // output it
    wp_nav_menu( array( \'theme_location\' => \'my_theme_top_menu\') );
} else {
    // User has NOT applied a custom menu;
    // Do something else
}
。。。在else 声明,你可以做任何事。

结束

相关推荐

Thesis -style Navigation

我正在研究一个主题,我希望用户能够像论文一样选择要在主题选项页面中显示的页面。我已经在谷歌上搜索了几个小时的逆向工程论文,但还没有找到一个很好的解决方案。我想知道是否有人做过这件事或看过教程。