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
}
有办法吗?谢谢。
#1 楼
wp_get_nav_menu_items似乎正是您所需要的。它返回一个菜单对象数组。#2 楼
正如@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>';
}
#3 楼
上面带有循环修改的修改版本。添加到Functions.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;
}
#4 楼
获取简单的菜单数组。添加到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级深。
–混合Web开发
19年9月11日下午5:26
评论
对我来说这返回“假”
–约翰·史密斯
18年1月24日在9:43
您是否在复制粘贴@JohnSmith?您需要使用菜单的ID。
–布拉德·亚当斯(Brad Adams)
18-2-22在1:56
我发现这比使用walker类要容易得多。好一个!
–李
19 Mar 27 '19 at 18:48