下面的脚本创建导航菜单并为其分配页面。除了导航菜单没有自动分配到我的主题的“标题菜单”位置之外,一切都很正常。
知道为什么吗?
//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 );
最合适的回答,由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);
希望这有帮助:)