如何为多级菜单第一层级的最后一个li元素添加自定义类
为WordPress多级菜单的第一层级最后一个菜单项添加自定义类
你的原代码存在两个问题:一是数组索引错误(count($items)超出了数组有效索引范围,应该用count($items)-1);二是未区分顶级菜单项和子菜单项,会把类错误加到所有菜单项的最后一个(大概率是子菜单的项)。
要实现仅给第一层级最后一个li加类,需先筛选出所有顶级菜单项(父ID为0的项),再定位其中最后一个,最后给对应的菜单项添加类。修改后的代码如下:
function wpb_first_and_last_menu_class($items) { // 筛选出所有顶级菜单项(父ID为0) $top_level_items = array_filter($items, function($item) { return $item->menu_item_parent == 0; }); // 如果存在顶级菜单项 if (!empty($top_level_items)) { // 重置数组索引,确保能正确获取最后一个元素 $top_level_items = array_values($top_level_items); // 获取最后一个顶级菜单项的ID $last_top_level_id = end($top_level_items)->ID; // 遍历所有菜单项,找到对应ID的顶级项并添加类 foreach ($items as $item) { if ($item->ID == $last_top_level_id) { $item->classes[] = 'last'; break; // 找到后直接跳出循环,提升效率 } } } return $items; } add_filter('wp_nav_menu_objects', 'wpb_first_and_last_menu_class');
注意:这里把钩子从wp_nav_menu_items换成了wp_nav_menu_objects,因为前者处理的是HTML字符串,后者直接处理菜单项对象数组,操作更精准、更易维护。
内容的提问来源于stack exchange,提问作者yanksi_
相关产品推荐
相关产品推荐

