如何仅对wp_NAV_MENU的顶层设置限制?

时间:2013-04-03 作者:user30910

如何设置top level 中的菜单项wp_nav_menu?

示例:

我的管理仪表板中有以下菜单:

Example menu

我想数一数ONLY 顶级项目并显示数量有限的项目,比如说5个。

因此,无论您在管理仪表板中,并且您有100个顶级,它都应该只显示5个。

子页面通常也应显示,没有任何限制。

我在这里和网上寻找答案,我看到this answer 但最大的问题是,这个解决方案总共计算顶部和子页面,而我只需要计算顶部页面。

我想通过custom walker class 如果可能的话,一般使用PHP,而不是CSS和jQuery技巧和黑客。

3 个回复
SO网友:Simon

根据法典,你只需要使用depth仅显示顶级页面的参数:

<?php wp_nav_menu( array( \'location\' => \'your_location\', \'depth\' => 1 ) ); ?>
有关更多参考,请参阅this.

您还可以通过使用[wp_get_nav_menu_items][2] 然后使用自定义循环仅解析第一级和顶层页面。

编辑***我确实花了一些时间来开始一些帮助,不幸的是,我现在无法完成它,也许可以使它更优雅,但这可能是一个开始:

<?php 
    $menu_name = \'principal\';
        if ( ( $locations = get_nav_menu_locations() ) && isset( $locations[ $menu_name ] ) ) {
        $menu_test = wp_get_nav_menu_object( $locations[ $menu_name ] );
                    // WE GET THE ITEMS IN menu_order
        $menu_test_items = wp_get_nav_menu_items( $menu_test->term_id );
        $top_items = array();
                    // LOOP THEM AND CREATE NESTED ARRAY LIKE THE MENU 
        foreach( $menu_test_items as $menu_test_item ) {
            if ( $menu_test_item->menu_item_parent == 0 ) {
                $top_items[$menu_test_item->ID][$menu_test_item->ID] = $menu_test_item;     
            } else {
                $top_items[$menu_test_item->menu_item_parent][$menu_test_item->ID] = $menu_test_item;
            }

        }
                    // THEN WE COULD JUST LOOP IT x TIMES AND BREAK
        foreach ( $top_items as $top_item ) {  
            // Npw you need to loop x times
            // and display $top_item with another foreach
        }
    }
?>

SO网友:Sormano

您可以尝试以下操作:

function my_max_5_menu_items( $menu_items) {

    return array_slice( $menu_items, 0, 5 );

}
add_filter( "wp_nav_menu_items", "my_max_5_menu_items" );
没有机会测试这个。

SO网友:Aaron Harun

供参考,Sormano 位于正确的路径上,但筛选器传递字符串。正确的版本为:

function my_max_5_menu_items( $menu_items) {
    $menu_items = explode(\'</li>\', $menu_items);

    $menu_items = array_slice( $menu_items, 0, 5 );

    return implode(\'</li>\', $menu_items);
}
add_filter( "wp_nav_menu_items", "my_max_5_menu_items" );
显然,只有当您还使用depth=1. 但如果您只需要一个简单的解决方案,那么创建客户漫游器是一个更简单的解决方案。

结束

相关推荐

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