0

在 wordpress 仪表板中,我在外观 -> 菜单下创建了一个菜单,并将其命名为“my-menu”。

使用此页面中的示例代码,我正在尝试构建菜单。在我的/wp-content/themes/blankslate/header.php我添加以下代码:

$menu_name = 'my-menu';
$locations = get_nav_menu_locations();
print_r ($locations);

基本上在每一页上$locations都是一个空数组,即使我已经创建并保存了菜单。希望创建菜单并将其名称放在自定义字段中,以便每个页面都可以拥有自己的菜单(或者在未提供自定义字段时留空或默认菜单时没有)。

猜猜我没有得到 wordpress 打算让用户使用它的方式,也许它只是某个地方的复选框。我确实注意到,当我选中Main MenuAppearance -> Menus 下的框时,返回的数组不是空的,而是$locations[ $menu_name ]没有设置。

使用带有修改后的空白主题的 wordpress 3.6.1。

[更新] functions.php 几乎没有更改,并且 register_nav_menus 使用以下参数设置:

array( 'main-menu' => __( 'Main Menu', 'blankslate' ) )

我猜这就是Main Menu仪表板上的外观-> 菜单中的复选框的来源。注释掉这一行会使Menus它们一起消失。

4

2 回答 2

0

在 /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>';

示例代码没有显示如何处理嵌套项,但当我弄清楚那个时我会更新。

于 2013-10-13T07:15:27.687 回答
0
    $locations = get_theme_mod( 'nav_menu_locations' );
print_r($locations);

尝试这个

于 2013-10-13T04:34:49.067 回答