将类添加到活动的顶级(祖级)菜单项

时间:2018-08-06 作者:Sam

我正在建立一个有超大菜单的网站。结构如下所示:

<ul>
  <li class="active-grandparent">Grandparent
    <ul>
      <li>Parent</li>
      <li>Parent</li>
      <li>Parent</li>
      <li>Parent
        <ul>
          <li>Child</li>
          <li>Child</li>
          <li>Child</li>
          <li>Child</li>
        </ul>
      </li>
    </ul>
  </li>
  <li>Grandparent</li>
  <li>Grandparent</li>
  <li>Grandparent</li>
</ul>
我想把“活跃的祖父母”这个班级添加到顶级祖父母中<li> 如果您在该页或父/子页上。

WordPress为每个<li> 项目a类current-menu-item, 但我需要特别针对祖父母<li> 只有这样,我才能在它处于活动状态时添加一些样式。

这是如何实现的?

Updated正如评论中指出的,我可以使用current-menu-ancestor. 然而,这只是在祖父母身上产生的<li> 当您在父页面或子页面上时。

要澄清的是,如果您位于顶级祖父母页面(/祖父母),则这些是在<li>:

.menu-item
.menu-item-type-post_type
.menu-item-object-page 
.current-menu-item 
.page_item page-item-12 
.current_page_item 
.menu-item-has-children 
.menu-item-203
如果您位于父页(/祖父母/父页)或子页(/祖父母/父/子页),则这些是在祖父母中生成的类<li>:

.menu-item 
.menu-item-type-post_type 
.menu-item-object-page 
.current-page-ancestor 
.current-menu-ancestor 
.current-menu-parent 
.current-page-parent 
.current_page_parent 
.current_page_ancestor 
.menu-item-has-children 
.menu-item-203
如果有帮助,以下是如何在模板文件中生成我的菜单:

<nav class="sidebar-navigation">
  <ul>
    <?php
      $menu = array( \'container\' => false, \'menu_class\' => false, \'items_wrap\' => \'%3$s\' );
      // Left
      wp_nav_menu( array_merge(
        array( \'theme_location\'  => \'left\' ),
        $menu
      ) );
      // Right
      wp_nav_menu( array_merge(
        array( \'theme_location\'  => \'right\' ),
        $menu
      ) );
    ?>
  </ul>
</nav>

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

如果顶级项目处于活动状态或子项目处于活动状态,则可以使用纯CSS设置其样式。使用child selector, >, 从顶部开始:

.sidebar-navigation > ul > .current-menu-item,
.sidebar-navigation > ul > .current-menu-ancestor {}
如果要添加新类,可以使用nav_menu_css_class 滤器其参数之一是$depth, 您可以使用它仅影响顶级项目。要判断它的孩子是否处于活动状态,您只需检查current-menu-itemcurrent-menu-ancestor 类别:

function wpse_310629_nav_menu_css_class( $classes, $item, $args, $depth ) {
    if ( $depth === 0 ) {
        if ( 
            in_array( \'current-menu-item\', $classes ) || 
            in_array( \'current-menu-ancestor\', $classes ) 
        ) {
            $classes[] = \'active-grandparent\';
        }
    }

    return $classes;
}
add_filter( \'nav_menu_css_class\', \'wpse_310629_nav_menu_css_class\', 10, 4 );

结束

相关推荐

如何向导航栏添加schema.org SiteNavigationElement和属性URL?

我想添加架构。组织机构SiteNavigationElement 以及导航栏链接的相对url属性。我有以下几点:<nav class=\"navbar navbar-default navbar-fixed-top\" id=\"menu-nav\" role=\"navigation\"> <!-- Brand and toggle get grouped for better mobile display --> <div class=\"navb