以编程方式更新主题位置

时间:2011-09-23 作者:elke_wtf

我一直在尝试通过编程更新我的主题位置,虽然菜单是用菜单项创建的,但主题位置从未设置过。

以下是我所拥有的:

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时创建的默认菜单。

2 个回复
SO网友:Chip Bennett

一般来说,您不应该(或不需要)更新theme_location 用于自定义导航菜单。这个theme_locationtemplate 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 Namewp_create_nav_menu().

SO网友:lulalala

How to Hard Code Custom menu items

这里的答案演示了如何设置菜单并将其链接到菜单位置。

结束

相关推荐