如何检查当前页面是给定菜单中的父项还是子项

时间:2013-06-28 作者:Angus Russell

我正在尝试在我的主题中构建一个子菜单,我已经让它工作了,除了它在没有子菜单的顶级页面上显示之外。

如何检查当前页面(或当前菜单项)是给定菜单中的父项还是子项(我很确定逻辑成立)?

目前,我正在尝试在menu函数之外进行此检查,因为它有包装div和一个标题,在页面不是父或子页面的情况下,我根本不想显示该标题。然而,如果我的问题的最佳答案是通过定制的助行器输出整个内容,那么我也愿意接受这可能的工作方式。

提前谢谢。

编辑:我有点进一步,但现在卡住了,我可以捕获作为变量的子菜单,但我不能检查“如果子菜单中没有任何内容,则不显示任何内容”。在以下代码中,$submenu 如果没有任何项目,则不会返回falsefallback_cb => false.

$main_menu_id = 2; // Change to the main menu id for this install
$top_menu_id = 4; // Change to the top menu id for this install
$in_menu = \'\';

// Check what menu the page is in, if any
if( coepio_is_in_menu( $main_menu_id ) ) {
    $in_menu = \'main-nav\';
} else if( coepio_is_in_menu( $top_menu_id ) ) {
    $in_menu = \'top-nav\';
}

// If the page is in a menu...
if( $in_menu != \'\' ) {

    // Capture submenu as a variable
    $args = array( 
                \'theme_location\' => $in_menu,
                \'echo\'           => \'0\',
                \'sub_menu\'       => true,
                \'falback_cb\'     => false
        );
    $submenu = wp_nav_menu( $args );

    // If the menu has items
    if( $submenu ) {
        echo \'Menu is good to go\';
        ?>
        <div id="submenu" class="sidebar cf" role="navigation">

            <div class="widget">
                <div id="submenu-title" class="widget-title">
                    <h4>In This Section</h4>
                </div>
                <div class="widget-content">
                    <?php 
                    echo $submenu; 
                    ?>
                </div>
            </div>

        </div><!-- #submenu -->
        <?php
    }

}
你可能已经注意到了\'sub_menu\' => true$args. 下面是处理该问题的代码,摘自另一篇SO帖子。

// Submenus - required for the submenu (above) to work
// filter_hook function to react on sub_menu flag
function coepio_submenu( $sorted_menu_items, $args ) {
  if ( isset( $args->sub_menu ) ) {
$root_id = 0;

// find the current menu item
foreach ( $sorted_menu_items as $menu_item ) {
  if ( $menu_item->current ) {
    // set the root id based on whether the current menu item has a parent or not
    $root_id = ( $menu_item->menu_item_parent ) ? $menu_item->menu_item_parent : $menu_item->ID;
    break;
  }
}

$menu_item_parents = array();
foreach ( $sorted_menu_items as $key => $item ) {
  // init menu_item_parents
  if ( $item->ID == $root_id ) $menu_item_parents[] = $item->ID;

  if ( in_array( $item->menu_item_parent, $menu_item_parents ) ) {
    // part of sub-tree: keep!
    $menu_item_parents[] = $item->ID;
  } else {
    // not part of sub-tree: away with it!
    unset( $sorted_menu_items[$key] );
  }
}

return $sorted_menu_items;
  } else {
return $sorted_menu_items;
  }
}
add_filter( \'wp_nav_menu_objects\', \'coepio_submenu\', 10, 2 );

1 个回复
SO网友:TheDeadMedic

我通常使用以下内容:

$submenu = wp_list_pages(
    array(
        \'child_of\' => $post->ID,
        \'echo\'     => false,
    )
);

if ( $submenu )
    printf(
        \'<ul class="submenu">%s</ul>\',
        $submenu
    );
$submenu 如果当前页没有子级,则将计算为false(空)。

结束

相关推荐

REGISTER_NAV_MENUS和wp_NAV_MENU问题,不显示独立菜单

我的问题是wordpress没有将两个菜单显示为单独的菜单,它只是将菜单上的内容输出到两个位置。URL:http://www.msc-media.co.uk检查页眉和页脚的链接-我知道页脚很难看,以后需要整理css。我在函数中创建了两个菜单。php使用此代码。<?php register_nav_menus( array( \'topmenu\' => \'Top Menu\', \'footermenu\' => \'Fo