我正在建立一个有超大菜单的网站。结构如下所示:
<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>
最合适的回答,由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-item
或
current-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 );