WP自定义菜单错误>菜单名称已存在?

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

当我在下面的代码中对$menu\\u id进行var\\u转储时,我遇到了一个令人费解的错误。。。

首先,测试代码要动态创建一个自定义菜单,并将其分配到一个名为“标题菜单”的注册菜单位置(创建菜单,但未能将其分配到主题的菜单位置)。。。

$menu_id = wp_create_nav_menu(\'my_test_menu_abc_123\');
//var_dump($menu_id);die;
wp_update_nav_menu_item($menu_id, 0, array(
    \'menu-item-title\' => \'First Menu Item\', 
    \'menu-item-url\' => \'http://mysite.com\', 
    \'menu-item-status\' => \'publish\'));
$theme = get_current_theme();
$mods = get_option("mods_$theme");
$mods[\'nav_menu_locations\'][\'header-menu\'] = $menu_id;
update_option("mods_$theme", $mods);
当我在下面的$menu\\u id上转储var\\u时,它将返回。。。

对象(WP\\u Error)#110(2){[“errors”]=>数组(1){[“menu\\u exists”]=>数组(1){[0]=>字符串(102)“菜单名my\\u test\\u menu\\u abc\\u 123与其他菜单名冲突。请尝试其他名称。”}}[“error\\u data”]=>数组(0){}}

我给菜单取什么名字并不重要,我总是会遇到这个错误。这让我相信我下面代码的逻辑有缺陷。尽管如此,它仍然可以很好地创建菜单,并将菜单项插入其中。它只是无法将菜单分配到主题的标题菜单位置。

有什么想法吗?

Background: 感谢的帮助@Bainternet, 我已经设法找到了一个非常接近的解决方案。我想做的是以编程方式动态创建一个新的自定义菜单[solved], 然后将该菜单分配给我的主题的一个注册“菜单位置”[still not solved - and no one else appears to be able to do this], 全部通过插件内的脚本完成。

然而,尽管上面的代码将完美地创建my\\u test\\u menu\\u测试,但它并没有将其分配到主题的“标题菜单”位置。

我发现问题的第一条线索是,echo语句似乎与我用来创建菜单的代码冲突。

这是我一直在使用的外部参考。。。

http://wordpress.org/support/topic/how-to-assign-a-wordpress-3-menu-to-primary-location-programmatically

然而,目前尚不清楚作者的解决方案是否真的适用于其他人(根据我和帖子上其他回复者的经验)。。。

有趣的是,正如一些人所指出的,将自定义导航菜单分配给主题的自定义菜单位置似乎没有包含在自定义菜单API中

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

当我将您发布的代码放在我的函数文件中时,我也遇到了同样的错误,因此我将其包装在if中,以便只运行一次,并使用get\\u term\\u by获取菜单id,使用set\\u theme\\u mod()指定菜单位置,因此下面是您自己的函数,用于将菜单指定给位置:

function scotts_set_nav_menu($menu_id,$location){
    $locations = get_theme_mod(\'nav_menu_locations\');
    $locations[$location] = $menu_id;
    set_theme_mod( \'nav_menu_locations\', $locations );
}
您可以使用以下代码进行尝试:

$run_once = get_option(\'menu_check\');
if (!$run_once){
    $name = \'test\';
    $menu_id = wp_create_nav_menu($name);
    $menu = get_term_by( \'name\', $name, \'nav_menu\' );
    wp_update_nav_menu_item($menu->term_id, 0, array(
        \'menu-item-title\' => \'First Menu Item\', 
        \'menu-item-url\' => \'http://mysite.com\', 
        \'menu-item-status\' => \'publish\'));
    scotts_set_nav_menu($menu->term_id,\'header-menu\');
    update_option(\'menu_check\', true);
}
刚试过,效果很好。

SO网友:chifliiiii

您不需要执行以下操作:

$menu = get_term_by( \'name\', $name, \'nav_menu\' );
    wp_update_nav_menu_item($menu->term_id, 0, array(
        \'menu-item-title\' => \'First Menu Item\', 
        \'menu-item-url\' => \'http://mysite.com\', 
        \'menu-item-status\' => \'publish\'));
您只需执行以下操作:

wp_update_nav_menu_item($menu_id, 0, array(
            \'menu-item-title\' => \'First Menu Item\', 
            \'menu-item-url\' => \'http://mysite.com\', 
            \'menu-item-status\' => \'publish\'));
我的意思是使用创建时返回的menu\\u id。

谢谢你的解决方案反正我还是不能投赞成票

结束

相关推荐