自动显示子菜单

时间:2012-06-29 作者:Jason

要开始。。。我不熟悉Wordpress和开发主题。

我有一个主菜单,我使用以下代码将其放置在标题中:

<?php wp_nav_menu( array( \'theme_location\' => \'primary\', \'menu_class\' => \'topNav\', \'after\' => \'<span> </span>\' ) ); ?>
我还这样定义了我的菜单:

Menu Definition

这是我想要的结果(嗯,主要是):

Page View

现在,我想在下面的白色页面内容区域中显示一个子菜单。子菜单将与主菜单(ContentTopNavigation)一样显示。因此,如果菜单设置为(仅用于演示):

Sub Menu Definition

并且选择了STORE主菜单项,STORE页面的顶部会有一个菜单,其中显示了3个子菜单项。

如何使这种关系自动化?也就是说,页面的子菜单将根据显示的顶级菜单项自动显示。

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

如果你用自己的html标记和css开发这个主题,那么应该相当容易。。。

<?php wp_nav_menu( array( \'theme_location\' => \'primary\', \'menu_class\' => \'topNav\', \'after\' => \'<span> </span>\' ) ); ?>

您会注意到这个菜单PHP生成了一个无序列表,您的子菜单是一个嵌套的无序列表。

在dom中查看生成的标记,它看起来像这样。。。

<ul class="menu">

    <li class="menu-item">
        <a href="...">Home</a>
    </li>

    <li class="menu-item current-menu-parent">  
        <a href="...">Store</a>

        <ul class="sub-menu" style="display: none;">

            <li class="sub-menu-item">
                <a href="...">My Account</a>
            </li>

            <li class="sub-menu-item current-menu-item">
                <a href="...">Track your order</a>
            </li>

            <li class="sub-menu-item">
                <a href="...">Checkout - Pay</a>
            </li>

        </ul>

    </li>

    <li class="menu-item">
        <a href="...">Workshop</a>
    </li>

    <li class="menu-item">
        <a href="...">Gallery</a>
    </li>

</ul>
您可以在标记中看到wordpress为每个元素生成了一个类。

当您的菜单项处于活动状态时,wordpress add的活动类current-menu-itemcurrent-menu-parent 到李家

因此,使用下面这样的jquery,您可以控制这些子元素的可见性。。。

var allSubmenus = $(\'.sub-menu\').hide();
// this variable makes all sub menu ul\'s \'display: none;\'

$(\'li.current-menu-parent, li.current-menu-item\').find(\'ul\').show();
// if these li\'s have current class\'s, they\'re set to \'display: block\', this is for page reloads so the current menu is visible on page load.

$(\'li.menu-item a\').click(function() {
    allSubmenus.hide();
    $(this).parent().find(\'ul\').show();
});
// this basically, when a menu link is clicked, hides all sub menu\'s using our variable, then finds any child ul\'s (sub menu) and set\'s to \'display block\'
然后在此之后,您必须聪明地使用css并定位ul.sub-menu 对父级绝对ul.menu { position: relative } - 并确保li.menu-itemul.menu 溢出设置为可见,但li.menu-item 必须没有定位。

如果你不能理解CSS,请告诉我。

<小时>

UPDATE

我几乎刚刚意识到,如果你的子菜单只出现在current-menu-item 页面本身,并且您不希望在主菜单的另一页上显示子菜单。。。然后您只需像这样设置css,不需要jQuery。。。(但也使用上述相同的css方法)

ul.menu {
   position: relative;
   overflow: visible;
}

li.menu-item {
   /* No positioning */
   overflow: visible;
   float: left;
}

ul.sub-menu {
   display: none;
   position: absolute;
}

li.sub-menu-item {
   float: left;
}

li.current-menu-parent ul,
li.current-menu-item ul {
   display: block !important;
}

结束

相关推荐

StylesSwitcher或ThemesSwitcher,允许用户从移动设备切换回标准视图

我用CSS创建了一个移动版的网站,所有样式都在一个样式表中(使用@media only screen and (max-width: 480px), only screen and (max-device-width: 480px) 定义移动样式)。当它都在一个样式表中时,它工作得很好。但我想允许用户切换回标准视图,即使他们从移动设备查看站点。我不知道如何允许用户覆盖@media, 所以我似乎有两个选择:(1)单独的样式表加上样式切换脚本,或者(2)单独的主题加上主题切换。理论上,样式切换器应该可以做到这