我有一个多站点设置,有两个子域。第一个是site1.example.com,它包含pages page1和page2,第二个子域是带有pages page3和page4的site2.example.com。
我正在为site1.example.com创建一个自定义主题,在这个主题中,我希望通过编程方式在site1.example.com中创建一个在site2.example.com中引用page3的菜单项。
到目前为止,为了以编程方式在同一子域中创建引用页面的菜单项,我所做的是使用函数wp_update_nav_menu_item(),如下所示:
$page = get_post(111); // page id of a page1, that is in the same subdomain
wp_update_nav_menu_item($menu_id, 0, array(
'menu-item-title' => 'Page 1',
'menu-item-object-id' => $page->ID,
'menu-item-object' => 'page',
'menu-item-status' => 'publish',
'menu-item-type' => 'post_type',
));但是要在另一个子域中引用一个页面,我必须将menu-item-type设置为自定义,并按如下方式使用该调用
wp_update_nav_menu_item($menu_id, 0, array(
'menu-item-title' => 'Page 3',
'menu-item-url' => 'http://site2.example.com/page3',
'menu-item-status' => 'publish',
'menu-item-type' => 'custom',
));现在,我的问题是:是否有一种方法可以在site1.example.com中创建一个在site2.example.com中引用page3但使用上述第一种方法的菜单项?(请不要问我为什么不直接使用上面的第二个解决方案,类型是定制的,但是原因太长,无法在这里解释,我需要使用第一种方法)。
我在site1.example.com的主题中尝试了以下内容:
$page = get_post(333); // page id of a page3 in the the second subdomain, which is site2.example.com, which is different than the current subdomain
wp_update_nav_menu_item($menu_id, 0, array(
'menu-item-title' => 'Page 3',
'menu-item-object-id' => $page->ID,
'menu-item-object' => 'page',
'menu-item-status' => 'publish',
'menu-item-type' => 'post_type',
));但这样做会导致debug.log文件中出现此错误。
[28-Feb-2020 20:31:48 UTC] PHP Notice: Trying to get property 'post_parent' of non-object in /var/www/wordpress/wp-includes/nav-menu.php on line 485
[28-Feb-2020 20:31:48 UTC] PHP Notice: Trying to get property 'post_title' of non-object in /var/www/wordpress/wp-includes/nav-menu.php on line 486显然,WordPress不喜欢它。但有办法解决这个问题吗?
谢谢。
发布于 2020-02-28 22:06:12
WP导航菜单只能包含来自当前站点的帖子ID。
原因是,每个子站点都有自己的单独的wp_posts表。当您将items by ID添加到nav菜单中时,您将ID本身保存到菜单中,并且WP将在每次拉出菜单时动态计算该ID的正确permalink。(它还会动态地提取帖子标题,除非您在菜单设置中重写了它。)因为您可以在每个子站点中使用相同的ID,如果您只将一个post ID保存到导航菜单中,就无法告诉WordPress“在这个子站点上查找这个ID”。WordPress总是会在当前站点的帖子表中查找ID。
但是,您可以在PHP主题模板中切换博客in,这样您就可以找到另一种构建菜单的方法--一种不使用本机WP导航菜单的方法。switch_to_blog()函数切换到从特定的(按ID编号)子站点中提取信息,这样您就可以从一个站点中提取链接,然后从第二个站点(如果有更多的站点,等等)的链接,并将它们一起显示在一个标头中,例如。
https://wordpress.stackexchange.com/questions/359728
复制相似问题