如何在所有子博客中添加一个属于父博客的菜单?

时间:2013-01-30 作者:Marco Godínez

我想将属于父多站点博客的菜单添加到所有子博客。我需要在所有子博客中显示菜单,我的意思是在所有多站点博客上显示相同的菜单。我怎么能做到?

2 个回复
最合适的回答,由SO网友:Marco Godínez 整理而成

嗯,多亏了@toscho ... 为了您的帮助,我找到了一种方法来实现将属于父博客的主导航显示给所有子博客:

/**
 * Plugin Name: Network Primary Nav
 * Network: true
 */

add_filter( \'wp_nav_menu_objects\', \'network_primary_nav\', 100, 2 );

function network_primary_nav( $menu_items, $args )
{
  global $blog_id;
  $menu_name = \'primary\';

  if ( ( $blog_id > 1 ) && $menu_name == $args->theme_location )
  {

    // to parent blog
    switch_to_blog(1);

    $locations = get_nav_menu_locations();

    // get primary nav of parent blog
    if ( isset( $locations[ $menu_name ] ) )
    {
      $menu       = wp_get_nav_menu_object( $locations[ $menu_name ] );
      $menu_items = wp_get_nav_menu_items( $menu->term_id);
    }

    // to child blog
    restore_current_blog();

  }

  return $menu_items;

}

SO网友:fuxia

使用插件标头强制网络激活:

Network: true
在上注册菜单页admin_menunetwork_admin_menu.

示例代码:

<?php
/**
 * Plugin Name: Network Wide Admin Menu
 * Network: true
 */
add_action( \'admin_menu\',         \'nwam_add_menu\' );
add_action( \'network_admin_menu\', \'nwam_add_menu\' );

/**
 * Register an admin menu item.
 *
 * @wp-hook admin_menu
 * @wp-hook network_admin_menu
 * @return void
 */
function nwam_add_menu()
{
    add_menu_page(
        \'Page Title\',
        \'Menu Title\',
        \'exist\',
        \'nwam\',
        \'nwam_render\'
    );
}
/**
 * Callback to render the menu page.
 *
 * @return void
 */
function nwam_render()
{
    print \'<h1>\' . $GLOBALS[\'title\'] . \'</h1>\';
}
现在可以在所有子站点和网络管理站点上访问该菜单:

enter image description here

回答您的意见:要向所有导航菜单添加项目,请使用以下代码this answer 在带有标题的插件中Network: true.

结束

相关推荐

WordPress MultiSite-可以将主站点放入子目录中吗?

我正在创建一个具有不同语言版本的网站,客户的要求是所有语言版本都是:在多站点设置中有一个不同的站点,它们都有这样的地址:mysite。由于主站点是英文的,所以它的地址实际上必须是mysite。com/en,不仅仅是mysite。com公司如果可能的话,我不想从主站点重定向到一个只有mysite地址的子站点。com/en,但是否要使用具有子目录地址的实际主站点?原因:管理界面;数据库更干净且一致。