检索数组中的菜单项列表


17

我目前正在研究自定义主题。在这个主题中,我有一个使用进行注册的菜单,register-nav-menu然后使用该wp_nav_menu功能将其显示在网页上。

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

因此,伪代码看起来像这样

$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
}

有办法吗?谢谢。

Answers:



49

正如@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>';

}

1
对我来说,这将返回“ false”
约翰·史密斯

4
您是否在复制粘贴@JohnSmith?您需要使用您的菜单的ID。
布拉德·亚当斯

我发现这比使用walker类要容易得多。好一个!

2

获取简单的菜单数组。

添加到Functions.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;
}

转到标题并调用功能

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

?>

这是一个不错的答案,但是只有1级深。
Hybrid Web Dev
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.