检索数组中的菜单项列表

时间:2013-08-21 作者:Greeso

我目前正在制作一个自定义主题。在这个主题中,我有一个我注册使用的菜单register-nav-menu, 然后,我使用wp_nav_menu 作用

但是,我只想检索菜单项列表(仅在wp admin区域中用于创建菜单的实际菜单项名称,没有任何html),并且我想将该菜单项列表保存到一个数组中(即,不显示它)。

psuedo代码如下所示

$menu_items = get_list_of_items($name_of_menu); // $name_of_menu is the result of register-nav-menu, and get_list_of_items is the psuedo function
foreach ($menu_items as $item) {
    // do something with the item
}
有没有办法做到这一点?谢谢

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

wp_get_nav_menu_items 看起来正是您所需要的。它返回一个菜单对象数组。

SO网友:Brad Adams

正如@vancoder提到的,wp_get_nav_menu_items() 不过,我认为更详细的答案对未来的人们更有帮助。

所述函数返回WP_Post Object 对象(因此可以使用箭头访问值,例如。$item->title).

对于基本设置,可以使用以下选项:

$menuLocations = get_nav_menu_locations(); // Get our nav locations (set in our theme, usually functions.php)
                                           // This returns an array of menu locations ([LOCATION_NAME] = MENU_ID);

$menuID = $menuLocations[\'primary\']; // Get the *primary* menu ID

$primaryNav = wp_get_nav_menu_items($menuID); // Get the array of wp objects, the nav items for our queried location.
然后你就可以绕过去$primaryNav 变量,例如:

foreach ( $primaryNav as $navItem ) {

    echo \'<li><a href="\'.$navItem->url.\'" title="\'.$navItem->title.\'">\'.$navItem->title.\'</a></li>\';

}

SO网友:Pete

使用递归循环修改了上述版本。

添加到函数。php

function wp_get_menu_array($current_menu=\'Main Menu\') {

    $menu_array = wp_get_nav_menu_items($current_menu);

    $menu = array();

    function populate_children($menu_array, $menu_item)
    {
        $children = array();
        if (!empty($menu_array)){
            foreach ($menu_array as $k=>$m) {
                if ($m->menu_item_parent == $menu_item->ID) {
                    $children[$m->ID] = array();
                    $children[$m->ID][\'ID\'] = $m->ID;
                    $children[$m->ID][\'title\'] = $m->title;
                    $children[$m->ID][\'url\'] = $m->url;
                    unset($menu_array[$k]);
                    $children[$m->ID][\'children\'] = populate_children($menu_array, $m);
                }
            }
        };
        return $children;
    }

    foreach ($menu_array as $m) {
        if (empty($m->menu_item_parent)) {
            $menu[$m->ID] = array();
            $menu[$m->ID][\'ID\'] = $m->ID;
            $menu[$m->ID][\'title\'] = $m->title;
            $menu[$m->ID][\'url\'] = $m->url;
            $menu[$m->ID][\'children\'] = populate_children($menu_array, $m);
        }
    }

    return $menu;

}

SO网友:Mahesh Kathiriya

Get simple array of menu.

添加到函数。php

    function wp_get_menu_array($current_menu) {

    $array_menu = wp_get_nav_menu_items($current_menu);
    $menu = array();
    foreach ($array_menu as $m) {
        if (empty($m->menu_item_parent)) {
            $menu[$m->ID] = array();
            $menu[$m->ID][\'ID\'] = $m->ID;
            $menu[$m->ID][\'title\'] = $m->title;
            $menu[$m->ID][\'url\'] = $m->url;
            $menu[$m->ID][\'children\'] = array();
        }
    }
    $submenu = array();
    foreach ($array_menu as $m) {
        if ($m->menu_item_parent) {
            $submenu[$m->ID] = array();
            $submenu[$m->ID][\'ID\'] = $m->ID;
            $submenu[$m->ID][\'title\'] = $m->title;
            $submenu[$m->ID][\'url\'] = $m->url;
            $menu[$m->menu_item_parent][\'children\'][$m->ID] = $submenu[$m->ID];
        }
    }
    return $menu;
}
Go to Your Header And Call Function

<?php
 $a = wp_get_menu_array(\'top-menu-header\');                         
 print_r($a); exit;                       

?>

结束

相关推荐

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