WordPress开发 – 遍历获取菜单列表(itemsList)并且获取菜单子项名(item_name)

写在前面今天开发首页菜单的时候,需要在指定的页面和指定的菜单添加a标签的class名,但是走了好多弯路,然后最…

写在前面

今天开发首页菜单的时候,需要在指定的页面和指定的菜单添加a标签的class名,
但是走了好多弯路,然后最终实现的时候,也不知道该怎么写这个文章?因为感觉只有我自己有这种需求。
比如我要在 一个页面名叫“咕咕咕” 而且菜单item名叫 咕噜球 我才给他active 否则不给。
想想还是写一个遍历获取菜单列表(itemsList)吧,英文文档看多了,中文写起来竟然不知道如何组织语言了。

教程开始

functions.php 页面添加以下代码。记得适当的修改,仅提供思路~

functions
//更改li a样式
function baolog_menu_link_class($atts, $item, $args)
{
    $menu_name = 'menu_index';
    //menu_index是你注册的导航名字
    if ($args->theme_location == $menu_name) {
        //获取导航id
        $menuLocations = get_nav_menu_locations();
        $menuID = $menuLocations[$menu_name];
        //获取当前导航名
        $id = $item->ID;//当前所遍历到的item(这里的item不能直接获取名字)
        $primaryNav = wp_get_nav_menu_items($menuID);
      
        $class = 'nav-link';//默认样式名
        //重新利用 wp_get_nav_menu_items()函数遍历当前菜单
        foreach ($primaryNav as $navItem) {
            //获取菜单item名
            $item_name = $navItem->title;
            //可以做一些其他的验证 比如我需要的就是下面
            if ($navItem->ID == $id) {//利用id反查出item的名字
                //可以判断is_page('页面名')||$item_name=="咕噜球"
              if (is_page('咕咕咕')) {
                    if ($item_name == "咕噜球") {
                        $class .= ' active';//追加样式
                    }
                }
            }
        }
        $atts['class'] = $class;
    }
    return $atts;
}
add_filter('nav_menu_link_attributes', 'baolog_menu_link_class', 1, 3);

写在后面

不知道讲的是否有点迷糊了,大概的思路就是这样子吧~不懂的函数可以谷歌官方查一下。

类别:WordPress开发

本文收集自互联网,转载请注明来源。
如有侵权,请联系 wper_net@163.com 删除。

评论 (4)COMMENT

登录 账号发表你的看法,还没有账号?立即免费 注册