我在用这个Bootstrap 4 Navwalker, bs4navwalker, 逐步浏览WordPress菜单项并生成导航栏,如。。。
单层-工程
<?php
wp_nav_menu([
\'menu\' => \'primary\',
\'theme_location\' => \'primary\',
\'container\' => \'nav\',
\'container_class\' => \'sidebar-nav\',
\'menu_id\' => \'sidebarnav\',
\'depth\' => 2,
\'fallback_cb\' => \'bs4navwalker::fallback\',
\'walker\' => new bs4navwalker()
]);
?>
这将正确生成导航栏,如。。。
<nav class="sidebar-nav">
<ul id="sidebarnav" class="menu">
<li id="menu-item-3" class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item current_page_item menu-item-home menu-item-3 nav-item active">
<a title="Home Page" target="_blank" href="http://sandbox.contexthq.com/" class="nav-link active" aria-expanded="false">
<i class="icon-speedometer"></i>Home Page
</a>
</li>
<li id="menu-item-4" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-4 nav-item">
<a title="Example Page" target="_blank" href="http://example.com/" class="nav-link" aria-expanded="false">
<i class="ti-layout-grid2"></i>Example Page
</a>
</li>
<li id="menu-item-5" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-5 nav-item">
<a title="Custom Page" target="_blank" href="http://example.com/custom/" class="nav-link" aria-expanded="false">
<i class="ti-palette"></i>Custom Page
</a>
</li>
</ul>
</nav>
多级-首选
下拉/子菜单项出现问题时。。。
我的主题可以处理这样的主题。。。
<nav class="sidebar-nav">
<ul id="sidebarnav">
<li class="selected">
<a class="has-arrow waves-effect waves-dark" href="javascript:void(0)" aria-expanded="false">
<i class="icon-speedometer"></i>
<span class="hide-menu">
Dashboard <span class="badge badge-pill badge-cyan">4</span>
</span>
</a>
<ul aria-expanded="false" class="collapse">
<li><a href="index.html">Minimal</a></li>
<li><a href="index2.html">Analytical</a></li>
<li><a href="index3.html">Demographical</a></li>
<li class="active"><a href="index4.html" class="active">Modern</a></li>
<li><a href="index5.html">Cryptocurrency</a></li>
</ul>
</li>
<li>
<a class="has-arrow waves-effect waves-dark" href="javascript:void(0)" aria-expanded="false">
<i class="ti-layout-grid2"></i>
<span class="hide-menu">Apps</span>
</a>
<ul aria-expanded="false" class="collapse">
<li><a href="app-calendar.html">Calendar</a></li>
<li><a href="app-chat.html">Chat app</a></li>
<li><a href="app-ticket.html">Support Ticket</a></li>
<li><a href="app-contact.html">Contact / Employee</a></li>
<li><a href="app-contact2.html">Contact Grid</a></li>
<li><a href="app-contact-detail.html">Contact Detail</a></li>
<li><a href="javascript:void(0)" class="has-arrow">Inbox</a>
<ul aria-expanded="false" class="collapse">
<li><a href="app-email.html">Mailbox</a></li>
<li><a href="app-email-detail.html">Mailbox Detail</a></li>
<li><a href="app-compose.html">Compose Mail</a></li>
</ul>
</li>
</ul>
</li>
</nav>
。。。即:
添加<span>
具有.hide-menu
顶层链接内部<a>
添加一个<ul>
之后的无序列表这是我想要坚持的方法。
多级:navwalker提供的功能。然而,当使用navwalker时,我得到。。。
<nav class="sidebar-nav">
<ul id="sidebarnav" class="menu">
<li id="menu-item-3" class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item current_page_item menu-item-home menu-item-has-children menu-item-3 nav-item dropdown active">
<a title="Home Page" target="_blank" href="http://sandbox.contexthq.com/" class="nav-link dropdown-toggle active" data-toggle="dropdown" aria-expanded="false">
<i class="icon-speedometer"></i>Home Page</a>
<div class="dropdown-menu">
<a href="http://sandbox.contexthq.com/sample-page/" class="dropdown-item" aria-expanded="false"><i class="ti-palette"></i>Sample Page</a>
</div>
</li>
...
</ul>
</nav>
也就是说,它。。。
放置<div>
具有.dropdown-menu
内部<a>
, 而不是<span>
具有.hide-menu
对于子菜单项,使用<a>
elements我确信这是标准的Bootstrap 4行为-事实上,我很高兴在不同的网站上以这种方式使用它。然而,这并不是我所购买的Bootstrap 4主题所需要的,我目前正试图将其转换为WordPress主题。。。问题是,如何使用bs4navwalker,但要以与我的主题一致的方式显示下拉/子菜单项?
SO网友:Alt C
步骤1向标题中添加一个脚本,如下所示(最好使用enqueue方法。我需要一些人帮助我以WordPress的方式正确添加下面的脚本。jquery应该在第二个脚本之前运行>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
<script>
$(document).ready(function () {
$(\'.dropdown-menu a.dropdown-toggle\').on(\'click\', function(e) {
if (!$(this).next().hasClass(\'show\')) {
$(this).parents(\'.dropdown-menu\').first().find(\'.show\').removeClass("show");
}
var $subMenu = $(this).next(".dropdown-menu");
$subMenu.toggleClass(\'show\');
$(this).parents(\'li.nav-item.dropdown.show\').on(\'hidden.bs.dropdown\', function(e) {
$(\'.dropdown-submenu .show\').removeClass("show");
});
return false;
});
});
</script>
步骤2添加css,如下所示:
.dropdown-submenu {
position: relative;
}
.dropdown-submenu a::after {
transform: rotate(-90deg);
position: absolute;
right: 6px;
top: .8em;
}
.dropdown-submenu .dropdown-menu {
top: 0;
left: 100%;
margin-left: .1rem;
margin-right: .1rem;
}
步骤3现在进入walker类:搜索(&&;
0 === $depth
然后移除它。还要确保
\'depth\' => 3
现在应该开始显示第三级菜单。可能需要一些额外的css。告诉我进展如何