wordpress 多站点 wp_update_nav_menu_item 返回 $menu_item_db_id 但未显示在菜单中

Posted

技术标签:

【中文标题】wordpress 多站点 wp_update_nav_menu_item 返回 $menu_item_db_id 但未显示在菜单中【英文标题】:wordpress multisite wp_update_nav_menu_item returns $menu_item_db_id but does not show in menu 【发布时间】:2013-09-25 02:16:34 【问题描述】:

在多站点安装中使用 wp_update_nav_menu_item 功能时遇到一个奇怪的问题。

当我在 wp-admin 中执行此操作时,它通常可以工作。然而,现在我的任务是编写一个处理程序脚本来自动创建一个站点、添加一些默认页面、添加一个菜单并用这些页面填充菜单。

这里是有问题的代码:

$miid = wp_update_nav_menu_item($menu_id, 0, array(
'menu-item-title' => $post['post_title'],
'menu-item-object' => 'page',
'menu-item-object-id' => $pid,
'menu-item-type' => 'post_type',
'menu-item-status' => 'publish',
'menu-item-parent-id' => $navParentID,
'menu-item-position' => $post['menu_order']));

我已确保传入函数的所有值都是正确的,并且与我从 wp-admin 仪表板中调用此函数时传入的值匹配。

博客成功创建,默认页面和菜单也是如此。执行此操作时,它确实返回一个 $menu_item_db_id 值,表明它已成功运行,但实际上并没有将任何内容添加到菜单中,并且调用类似 print_r(wp_get_nav_menu_object($menu_id)); 的内容不会返回任何内容。

当我从 wp-admin 中的页面调用具有相同确切输入的相同函数时,一切正常。

我认为可能是当前博客上下文设置不正确,并使用此 sn-p 验证我在正确的博客中:

//Ensure we're updating the correct blog
$blogid = get_current_blog_id();
switch_to_blog($blogid);
echo get_current_blog_id()."<br/>"; 

还有其他人遇到过这个问题吗?

【问题讨论】:

【参考方案1】:

我也遇到了同样的问题.. 解决方案是为每个项目创建项目和菜单关系:

wp_set_object_terms($item_id, $menu_id, 'nav_menu');

由于某种原因,它不是在wp_update_nav_menu_item 中创建的

【讨论】:

你拯救了我的一天。谢谢!

以上是关于wordpress 多站点 wp_update_nav_menu_item 返回 $menu_item_db_id 但未显示在菜单中的主要内容,如果未能解决你的问题,请参考以下文章

带有 localhost 和 8090 端口的 Wordpress 多站点

Docker wordpress 多站点 - 要公开哪些端口?

在IIS上启用WordPress子域名模式多站点功能

Nginx 中的多站点 WordPress 重写规则

WordPress 多站点上的网络范围的 Cron 调度

php 在WordPress多站点网络中获取主站点的博客ID