首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多站点设置-在不同子域中引用页的菜单项

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

WordPress Development用户
提问于 2020-02-28 21:20:04
回答 1查看 473关注 0票数 0

我有一个多站点设置,有两个子域。第一个是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(),如下所示:

代码语言:javascript
复制
$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设置为自定义,并按如下方式使用该调用

代码语言:javascript
复制
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的主题中尝试了以下内容:

代码语言:javascript
复制
$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文件中出现此错误。

代码语言:javascript
复制
[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不喜欢它。但有办法解决这个问题吗?

谢谢。

EN

回答 1

WordPress Development用户

发布于 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编号)子站点中提取信息,这样您就可以从一个站点中提取链接,然后从第二个站点(如果有更多的站点,等等)的链接,并将它们一起显示在一个标头中,例如。

票数 0
EN
页面原文内容由WordPress Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://wordpress.stackexchange.com/questions/359728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档