多站点设置-菜单项引用不同子域中的页面

时间:2020-02-28 作者:Greeso

我有一个多站点设置,有两个子域。第一个是site1.example.com 其中包含页面page1page2, 第二个子域是site2.example.com 带页面page3page4.

我正在为创建自定义主题site1.example.com 我想在其中programmatically 在中创建菜单项site1.example.com 参考文献page3 在里面site2.example.com.

到目前为止,为了以编程方式创建引用同一子域中页面的菜单项,我所做的是使用函数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-typecustom 并使用以下调用

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 参考文献page3 在里面site2.example.com 但使用上述第一种方法?(请不要问我为什么不使用上面的第二种解决方案custom, 但是原因太长,这里无法解释,我需要使用第一种方法)。

我尝试了以下主题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不喜欢它。但有没有办法解决这个问题?

谢谢

1 个回复
SO网友:WebElaine

WP nav菜单只能包含来自当前站点的帖子ID。

原因是,每个子网站都有自己独立的wp_posts 桌子当您将ID项添加到nav菜单时,您将ID本身保存到菜单中,每次拉菜单时,WP都会动态计算该ID的正确永久链接。(除非您在“菜单设置”中覆盖了帖子标题,否则它还会动态拖动帖子标题。)由于您可以在每个子网站中拥有相同的ID,如果您只需将帖子ID保存到nav菜单中,就无法告诉WordPress“在另一个子网站上查找此ID”WordPress总是在当前站点的post表中查找该ID。

然而,您可以在PHP主题模板中切换博客ID,因此您可以找到一种不同的方法来构建菜单-一种不使用本机WP nav菜单的方法。这个switch_to_blog() 功能切换为从特定(按ID编号)子网站提取信息,因此您可以从一个网站提取链接,然后从第二个网站提取链接(如果您有更多网站,依此类推),并将它们一起显示在标题中,例如。

相关推荐

Sub Menus will not work

我急需帮助。我尽了我所知的一切努力将我的子菜单恢复到我的网站上。我安装了一个元滑块插件,在我的主页上获得一个滑块。它工作得很好,然后,我的子菜单停止工作!然后我停用了插件,认为这就是导致它的原因,子菜单仍然没有显示在我的网站上。我不确定我是否丢失了代码或什么,但我将非常感谢能得到的任何帮助。我也有海明威的主题,不确定这是否有什么关系。