遇到一个问题,要显示当前页面的面包屑导航,只是这个面包屑路径反应的不是页面自身的层级关系,而是该页面在菜单导航中的位置。因此需要检测该页面所在菜单的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', 'wpse16243_wp_nav_menu_objects' );
function wpse16243_wp_nav_menu_objects( $sorted_menu_items )
{
    foreach ( $sorted_menu_items as $menu_item ) {
        if ( $menu_item->current ) {
            $GLOBALS['wpse16243_title'] = $menu_item->title;
            break;
        }
    }
    return $sorted_menu_items;
}

全局变量$GLOBALS[‘wpse16243_title’]记录了当前菜单的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 - 指在该菜单中的层级关系

如果需要在调用菜单之前使用,可以先调用一下wp_nav_menu但不显示

8条留言

  1. WooCommerce 中如果将的按钮加到侧边栏中呢?这个调用代码是?

      1. “加入购物车” 按钮的

        1. 如果是某个产品的,用woocommerce shortcode试试,google一下。
          如果是想把当前页面的加入购物车按钮挪到sidebar,用js吧。

  2. 要是我,直接用 JS 获取插入 对应 DOM 里面了 \(^o^)/

    1. 如果这个元素是可有可无的东西,选js可以。必须有的话就只能php了

评论功能已关闭