提问人:Nikita Pelevin 提问时间:6/4/2023 最后编辑:Nikita Pelevin 更新时间:6/4/2023 访问量:54
将类添加到 Wordpress 菜单中的最后一项
Add class to last item in Wordpress menu
问:
我正在为 Wordpress 制作自己的模板。我只需要将类添加到最后一个菜单项。 此菜单如下所示:
<ul class="navbar-nav ms-auto">
<li class="nav-item ps-4"><a class="nav-link p-0" href="about.html">About</a></li>
<li class="nav-item ps-4"><a class="nav-link p-0" href="contacts.html">Contacts</a></li>
<li class="nav-item ps-4 ms-lg-4"><a class="nav-link p-0" href="#">EN</a></li>
</ul>
首先,我为我自己的类更改了标准的 WP 菜单类。
add_filter( 'nav_menu_css_class', 'change_menu_item_css_classes', 10, 4 );
function change_menu_item_css_classes( $classes, $item, $args, $depth ) {
if ( $args->theme_location === 'top') {
$classes = [ 'nav-item ps-4' ];
} else {
$classes = [];
}
return $classes;
}
然后我把类添加到最后一项。
add_filter( 'wp_nav_menu_objects', 'add_additional_class_on_lng_li', 100, 3 );
function add_additional_class_on_lng_li( $items ) {
if ( ! empty( $items ) ) {
$items[ count( $items ) ]->classes[] = 'ms-lg-4';
}
return $items;
}
但它没有被添加。我认为这是因为“wp_nav_menu_objects”总是先执行,然后应用“nav_menu_css_class”。你能帮我找到另一种将类添加到最后一项的方法吗? 谢谢!
更新
我在解决方案方面向前迈进了一步。
我只使用一个过滤器。并像这样测试代码。nav_menu_css_class
add_filter( 'nav_menu_css_class', 'change_menu_item_css_classes', 10, 4 );
function change_menu_item_css_classes( $classes, $item, $args, $depth ) {
if ( $args->theme_location === 'top' && $item->menu_order == $args->menu->count ) {
$classes = [ 'nav-item ps-4 ms-lg-4' ];
} else {
$classes = [];
}
return $classes;
}
它只在最后一个菜单项上添加类。 但是当我使用此代码时。
add_filter( 'nav_menu_css_class', 'change_menu_item_css_classes', 10, 4 );
function change_menu_item_css_classes( $classes, $item, $args, $depth ) {
if ( $args->theme_location === 'top') {
$classes = [ 'nav-item ps-4' ];
} elseif ( $args->theme_location === 'top' && $item->menu_order == $args->menu->count ) {
$classes = [ 'nav-item ps-4 ms-lg-4' ];
} else {
$classes = [];
}
return $classes;
}
它不会将类添加到最后一个菜单项。似乎只在“如果”和“else”起作用,而不是“elseif”。
答:
0赞
Nikita Pelevin
6/4/2023
#1
我想我找到了解决方案。 从我的 UPDATE 部件代码中,我交换了“if”和“elseif”,这段代码对我有用。
add_filter( 'nav_menu_css_class', 'change_menu_item_css_classes', 10, 4 );
function change_menu_item_css_classes( $classes, $item, $args, $depth ) {
if ( $args->theme_location === 'top' && $item->menu_order == $args->menu->count ) {
$classes = [ 'nav-item ps-4 ms-lg-4' ];
} elseif ( $args->theme_location === 'top' ) {
$classes = [ 'nav-item ps-4' ];
} else {
$classes = [];
}
return $classes;
}
评论
wp_nav_menu_objects
3
$items
wp_nav_menu_objects
2
args
3
1
2
$args
add_additional_class_on_lng_li($items, $args)
:last-of-type
li