Wordpress Bootstrap响应导航菜单-如何切换顶部菜单';使用Bootstrap Navwalker


Wordpress Bootstrap Responsive Nav Menu - how to toggle top menu's href link using Bootstrap Navwalker

例如,在我的wordpress导航菜单设置中,如下所示。

  • 主页
  • 关于我们
    • 我们是谁
    • 我们做什么
  • 服务
    • Web开发
    • Web设计

在所有这些菜单和子菜单上,我为每一个都有设置页面链接,这样用户就可以随心所欲地导航它们。

但是当我使用本教程中讨论的Bootstrap navwalker php插件时
http://www.pattonwebz.com/wordpress-custom/bootstrap-wordpress-responsive-menu/

"关于我们和服务"的链接被禁用。这是因为这两个菜单中都有子菜单内容,而且不知何故,插件只是禁用了任何包含子菜单的顶部菜单链接。我可以问一下需要做些什么来恢复"关于我们"answers"服务"菜单上的链接吗?我可以在下面的wp_nav_menu代码中切换任何选项吗?

<?php 
        wp_nav_menu( array(
          'menu'       => 'top_menu',
          'depth'      => 2,
          'container'  => false,
          'menu_class' => 'nav',
          'fallback_cb' => 'wp_page_menu',
          'walker' => new wp_bootstrap_navwalker())
        );
?>

可以修改这个导航器,使其执行您想要的操作,即将链接输出为href值,并允许您单击链接。

这里有两个问题需要解决:

  1. 使用的navwalker没有将url输出到href属性(而是输出"#")
  2. Bootstrap使用e.preventDefault禁用链接单击行为,并将其替换为自己的函数

让导航器输出一个url并停止Bootstrap接管点击行为只是修改导航器中的几行。我有一个repo的分支,它包含一个修改版本的walker。

停止Bootstrap接管链接的点击行为有一些含义。下拉菜单是在Bootstrap JS点击时打开的,所以如果你删除了它,那么菜单就不能再打开了。一个快速的解决方法是让它们出现在父对象的悬停位置。这是css可以做到这一点:

.menu-item-has-children:hover ul.dropdown-menu {
    display: block;
}

请注意,Navwalker的原始版本中禁用带有下拉菜单项是有原因的(Bootstrap核心不支持)。使顶级项目可点击链接意味着需要在悬停时显示下拉列表。触摸屏用户无法悬停。如果你预计有人会使用触摸屏,那么你应该避免让菜单项带有下拉链接,而只将它们作为下拉开关。

披露:我写了问题中引用的文章,并为使用的原始navwalker贡献了代码。

试试这个:(在尝试之前,你应该从wordpress管理面板创建导航菜单,没有它,它就无法工作。)

<div class="collapse navbar-collapse navbar-ex1-collapse">
    <?php wp_nav_menu(array(
        'container_class' => 'menu-header',
        'theme_location' => 'primary',
        'items_wrap' => '<ul id="%1$s" class="%2$s nav navbar-nav">%3$s</ul>',
        'walker' => new BS3_Walker_Nav_Menu,
    )); ?>
</div>
<!-- /.navbar-collapse -->

有关子菜单,请参见此处