在wordpress仪表板中,我在外观->菜单下创建了一个菜单,并将其命名为"my-menu"。
使用此页面中的示例代码,我正在尝试构建菜单。在我的/wp-content/themes/blankslate/header.php
中添加了以下代码:
$menu_name = 'my-menu';
$locations = get_nav_menu_locations();
print_r ($locations);
基本上,在每一页上,即使我已经创建并保存了菜单,$locations
也是一个空数组。希望创建菜单并在自定义字段中具有它的名称,以便每个页面都可以拥有自己的菜单(或者在未提供自定义字段时没有空或默认菜单时没有任何菜单)。
猜我不明白wordpress打算用户使用它的方式,也许它只是某个地方的一个复选框。我确实注意到,当我选中外观 -> 菜单下的框Main Menu
时,返回的数组不为空$locations[ $menu_name ]
但未设置。
使用带有修改后的空白主题的wordpress 3.6.1。
[更新]函数.php几乎没有更改,register_nav_menus使用以下参数设置:
array( 'main-menu' => __( 'Main Menu', 'blankslate' ) )
我想这就是仪表板上外观 -> 菜单中的Main Menu
复选框的来源。注释掉这一行会使Menus
一起消失。
$locations = get_theme_mod( 'nav_menu_locations' );
print_r($locations);
试试这个
in/
wp-content/themes/blankslate/functions.php
function getDefaultMenu(){
$loc=get_nav_menu_locations();
$menu = wp_get_nav_menu_object( $loc['main-menu'] );
return $menu;
}
function getMenu() {
global $post;
//set menuName to custom field called menu-name
$menuName = get_post_meta($post->ID, 'menu-name', true);
//menu to use
$useMenu = false;
//get available menus
$menus = wp_get_nav_menus();
//if no custom field was given use default-menu
// will fail if no menu is set to default
if (!$menuName) {
$useMenu=getDefaultMenu();
if(!$useMenu){
throw new Exception("Please make one of the menus".
" the main menu under Appearance => Menus");
}
return wp_get_nav_menu_items($useMenu->term_id);
}
//find the menu with the $menuName
// either default-menu or the custom field called menu-name
foreach ($menus as $menuItem) {
var_dump ($menuItem);
if ($menuItem->name === $menuName) {
$useMenu = $menuItem;
break;
}
}
//if no menu was found raise an error
//menu-name must be provided as a custom field
// or default menu must be set
if (!$useMenu) {
throw new Exception("Can't open menu named:" . $menuName .
" Make sure you set a custom field called menu-name" .
" with the name of one of the menus under Appearance => Menus".
" Or set one of the menus to Main Menu.");
}
return wp_get_nav_menu_items($useMenu->term_id);;
}
在/wp-content/themes/blankslate/page 中.php
$menu_items=getMenu();
var_dump($menu_items);
$menu_list = '<ul id="menuid">';
foreach ((array) $menu_items as $key => $menu_item) {
$title = $menu_item->title;
$url = $menu_item->url;
$menu_list .= '<li><a href="' . $url . '">' . $title . '</a></li>';
}
$menu_list .= '</ul>';
示例代码不显示如何处理嵌套项,但当我弄清楚那个时,我会更新。