检查页面是否在某个菜单中

时间:2012-12-10 作者:mrwweb

我有一个客户端需要两个“主菜单”,我们需要以编程方式显示包含当前页面的任何菜单。我该怎么做?

我们在“关于”页面。找出两个菜单中的哪一个包含“关于”页面,并显示其中一个。

1 个回复
最合适的回答,由SO网友:mrwweb 整理而成

这是我写的一个函数来解决这个问题。给它一个菜单slug/name/ID和post/page ID,它就会返回TRUE 如果该帖子/页面位于指定的菜单中FALSE 否则然后,只需快速执行if/else语句,对照这两个菜单检查并显示正确的菜单即可。

/**
 * Check if post is in a menu
 *
 * @param $menu menu name, id, or slug
 * @param $object_id int post object id of page
 * @return bool true if object is in menu
 */
function cms_is_in_menu( $menu = null, $object_id = null ) {

    // get menu object
    $menu_object = wp_get_nav_menu_items( esc_attr( $menu ) );

    // stop if there isn\'t a menu
    if( ! $menu_object )
        return false;

    // get the object_id field out of the menu object
    $menu_items = wp_list_pluck( $menu_object, \'object_id\' );

    // use the current post if object_id is not specified
    if( !$object_id ) {
        global $post;
        $object_id = get_queried_object_id();
    }

    // test if the specified page is in the menu or not. return true or false.
    return in_array( (int) $object_id, $menu_items );

}
示例用法:

if( cms_is_in_menu( \'main-menu\' ) ) {
    // do something like wp_nav_menu( $args );
}

结束

相关推荐

Wordpress Custom Menus Issue

在我的模板中,我使用这样的调用来输出一些自定义菜单:<?php wp_nav_menu(array(\'container_class\' => \'secondary-navigation\', \'theme_location\' => \'secondary\')); ?> 自从升级到WordPress 3.1.4后,我就可以获得完整的页面列表,而不是自定义菜单我看到修复程序(通过谷歌)说我应该添加以下内容来修复此问题:\'fallback_cb\' => f