我一直在尝试通过编程更新我的主题位置,虽然菜单是用菜单项创建的,但主题位置从未设置过。
以下是我所拥有的:
function create_my_menu() {
if(!is_nav_menu(\'primary-menu\')) {
$menu_id = wp_create_nav_menu(\'primary-menu\');
//$menu = array( \'menu-item-type\' => \'custom\', \'menu-item-url\' => get_home_url(\'/\'),\'menu-item-title\' => \'Home\', \'menu-item-status\' => \'publish\' );
$menu = get_term_by(\'name\', \'primary-menu\', \'nav_menu\');
wp_update_nav_menu_item($menu->term_id, 0, array( \'menu-item-type\' => \'custom\', \'menu-item-url\' => get_home_url(\'/\'),\'menu-item-title\' => \'Home\', \'menu-item-status\' => \'publish\' ));
// wp_update_nav_menu_item( $menu_id, 0, $menu );
$locations = get_theme_mod(\'nav_menu_locations\');
$locations[\'primary-menu\'] = $menu->term_id.
set_theme_mod(\'nav_menu_locations\', $locations);
}
}
我的菜单已注册到我的函数文件中。
add_action( \'init\', \'register_my_menu\' );
function register_my_menu() {
register_nav_menu( \'primary-menu\', __( \'Primary Menu\' ) );
}
EDIT
我正在为多站点设置开发插件。我需要在用户创建新站点时创建菜单。
我想我可以修改安装wordpress时创建的默认菜单。
SO网友:Chip Bennett
一般来说,您不应该(或不需要)更新theme_location
用于自定义导航菜单。这个theme_location
是template location 对于给定的导航菜单。
如果需要对自定义导航菜单进行动态操作,那么最好将id
而不是theme_location
. 上面的代码似乎将两者混为一谈。(Note that wp_create_nav_menu()
accepts a menu name as an argument, rather than a menu theme location.)
但是,通过以这种方式动态操作菜单,您实际上想做什么?也许我们能找到更好的解决办法。
EDIT
根据您的澄清:您肯定需要针对
Menu Name, 而不是
Theme Location.
一个主题位置与主题模板中定义的(物理)位置相关。主题位置不是菜单本身,而是指示菜单输出位置的标记。
如果需要生成默认菜单(and I\'m really not sure why you need to do this; simply define a proper callback to wp_nav_menu()
instead), 那么你需要通过Menu Name 到wp_create_nav_menu()
.