WordPress:获取当前页面菜单的current menu item,输出在菜单中的子菜单get sub menu

来源:柚子科技 WordPress 主题、WordPress插件    date:2022-9-6    标签:,     WordPress主题themes插件plugins开发定制

遇到一个问题,要显示当前页面的面包屑导航,只是这个面包屑路径反应的不是页面自身的层级关系,而是该页面在菜单导航中的位置。因此需要检测该页面所在菜单的current menu item,在stackexchange上找到了一个不错的方法,记录一下。

使用wp_nav_menu_objects filter查找current menu item,在调用wp_nav_menu之前先过滤一下这个filter的值,找到current menu item,将需要的信息,例如menu ID,标题或url等,记录到一个全局变量里。等调用完wp_nav_menu后,就可以使用这个全局变量显示信息了。

在当前菜单中做一下记号

add_filter( 'wp_nav_menu_objects', 'uzi_wp_nav_menu_objects' ); function uzi_wp_nav_menu_objects( $sorted_menu_items ) {     foreach ( $sorted_menu_items as $menu_item ) {         if ( $menu_item->current ) {             $_SESSION['uzi_current_menu'] = $menu_item;             break;         }     }     return $sorted_menu_items; }

全局变量$_SESSION['uzi_current_menu']记录了当前菜单的current menu item的标题。

一些比较有用的信息如下

$menu_item->ID - Menu ID $menu_item->title - 该菜单项名称 $menu_item->post_title - Post Title,不一定和菜单项名称相同 $menu_item->url -  固定链接 $menu_item->object_id - post ID $menu_item->post_parent - Post Parent(例如page的parent page) $menu_item->menu_item_parent - 指在该菜单中的层级关系

输出main-nav菜单中,当前页面所在菜单的子菜单

$locations = get_nav_menu_locations(); $menu = wp_get_nav_menu_object($locations['main-nav']); // primary' is our nav menu's name $menu_items = wp_get_nav_menu_items($menu->term_id); // var_dump($menu,$_SESSION['uzi_current_menu']->ID,$menu_items); if (!empty($menu_items)) {     echo '<ul>';     foreach ($menu_items as $menu_item) {         if($menu_item->menu_item_parent == $_SESSION['uzi_current_menu']->ID            || $menu_item->menu_item_parent == $_SESSION['uzi_current_menu']->			if ($menu_item->menu_item_parent == $_SESSION['uzi_current_menu']->ID 				|| ($menu_item->menu_item_parent == $_SESSION['uzi_current_menu']->menu_item_parent && 0 != $menu_item->menu_item_parent) 			) { 				//判断当前页面是该菜单项的子项 				if (is_page($menu_item->object_id) || is_category($menu_item->object_id)) { 					echo '<li class="current-menu-item">'; 				} else { 					echo '<li>'; 				} 				echo '<a href="' . $menu_item->url . '">' . $menu_item->title . '</a>'; 				echo '</li>'; 			}             }     echo '</ul>'; }

腾讯云限时秒杀【点击购买】

搬瓦工,CN2高速线路,1GB带宽,电信联通优化KVM,延迟低,速度快,建站稳定,搬瓦工BandwagonHost VPS优惠码BWH26FXH3HIQ,支持<支付宝> 【点击购买】!

Vultr$3.5日本节点,512M内存/500G流量/1G带宽,电信联通优化,延迟低,速度快【点击购买】!

阿里云香港、新加坡VPS/1核/1G/25G SSD/1T流量/30M带宽/年付¥288【点击购买】