You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为多级菜单第一层级的最后一个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_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 16:37:12