无法获取当前菜单ID

时间:2011-08-15 作者:Steven

我正在尝试获取当前菜单项ID。我发现一个线程使我走上了正确的轨道:How to get current-menu-item title as variable?

这是我在函数中使用的代码。php文件:

add_filter( \'wp_nav_menu_objects\', \'current_wp_nav_menu_object\' );

function current_wp_nav_menu_object( $sorted_menu_items )
{
   foreach ( $sorted_menu_items as $menu_item ) {
        if ( $menu_item->current ) {
            $GLOBALS[\'current_menu_title\'] = $menu_item->title;
            $_SESSION[\'current_menu_title\'] = $menu_item->title;
            break;
        }
    }
    return $sorted_menu_items;
}
但有一个恼人的问题。数据存储始终是最后单击的菜单项,而不是当前单击的菜单项。

让我们假设我有以下菜单项:

第1项第2项第3项第4项(我使用echo $_SESSION[\'current_menu_title\'] 查看结果)

按以下顺序单击菜单项,会得到以下结果:

Item 1 -> no output
Item 2 -> outputs Item 1  
Item 4 -> outputs Item 2  
Item 1 -> outputs Item 4  
为什么当前单击的菜单项没有输出?

1 个回复
SO网友:soulseekah

据我所知,菜单对象没有“current”属性,是吗?至少我没见过。因此,您可以通过比较当前的帖子/页面ID来接近您的要求(get_the_ID()) 带项目\'object_id 财产,当他们匹配时-轰!您获得了当前选定的菜单。

function wpse25992_store_current_id( $items, $menu, $args ) {
    foreach ( $items as $key => $item ) {
        // this is the currently displayed object
        if ( $item->object_id == get_the_ID() )
            $_SESSION[\'current_menu_title\'] = $item->title;
    }

    return $items;
}
add_filter( \'wp_get_nav_menu_items\', \'wpse31748_exclude_menu_items\', null, 3 );

结束

相关推荐

Menu API not switching menus?

我正在使用菜单API,我想切换到其他菜单,但出于某种原因,它保留了第一个菜单这是我的密码在函数中。php add_action( \'init\', \'register_my_menus\',10 ); function register_my_menus() { register_nav_menu(\'main-navigation\', \'Main Navigation\'); } 下面是我的主题文件(header.ph