自定义导航菜单是使用默认页面创建的,但没有挂钩到主题的自定义菜单位置

时间:2011-04-06 作者:Scott B

下面的脚本创建导航菜单并为其分配页面。除了导航菜单没有自动分配到我的主题的“标题菜单”位置之外,一切都很正常。

知道为什么吗?

//Register menu locations for the theme
add_action( \'init\', \'register_my_menus\' );
function register_my_menus() {
  register_nav_menus(
    array(\'header-menu\' => __( \'Header Menu\' ), \'footer-menu\' => __( \'Footer Menu\' ))
  );
}

//Create a nav menu, add a page to it and assign it to the theme\'s "header-menu" location.
$menu_id = wp_create_nav_menu( \'header-menu\' );
$menu = array( 
    \'menu-item-type\' => \'custom\', 
    \'menu-item-url\' => get_home_url(\'/\'),
    \'menu-item-title\' => \'Home\', 
    \'menu-item-status\' => \'publish\', 
    \'theme_location\' => \'header-menu\', //Just a guess but didn\'t work!!!
    );
wp_update_nav_menu_item( $menu_id, 0, $menu );

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

wp_create_nav_menu() 函数接受菜单名称而不是菜单位置。至于wp_update_menu_item() 好吧,这是为项目,而不是菜单本身。在深入研究代码后,我发现“分配”菜单的“主题位置”不是使用WordPress中的nav\\u菜单API完成的,而是使用主题选项完成的,因此:

//first get the current theme
$theme = get_current_theme();
//get theme\'s mods
$mods = get_option("mods_$theme");
//update mods with menu id at theme location
$mods[\'nav_menu_locations\'][\'header-menu\'] = $menu_id;
update_option("mods_$theme", $mods);
希望这有帮助:)

结束

相关推荐