多站点列出站点中的所有页面

时间:2014-10-06 作者:user668499

我有一个WP Multisite,包含3个站点-站点1、2、3

站点1和2只是一个页面,但站点3内部有多个页面。

我想在每个站点的顶部显示一个指向其他站点的导航。

我还想在每个页面上显示站点3中的子页面。

我在这里使用这段代码为所有站点创建导航。

<div class="navbar-collapse collapse">
<?php

  $the_blog_id = get_current_blog_id();
  $bcount = get_blog_count();

  global $wpdb;
  $blogs = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->blogs WHERE spam = \'0\' AND deleted = \'0\' and archived = \'0\' and public=\'1\'",13, \'stack overflow\' ) );

  echo ( $blogs->blogname );

  if ( !empty( $blogs ) ) {

?>
  <ul class="nav navbar-nav">
    <li class="portalHome">
      <a href="dashboard.html">
        <i class="fa fa-home"></i>
        <i class="fa fa-chevron-right pull-right chervonMobNav"></i>
      </a>
    </li>
<?php

  foreach ( $blogs as $blog ) {
    $details = get_blog_details( $blog->blog_id );

      if ( $details != false ) {
        $addr = $details->siteurl;
        $name = $details->blogname;
        $id = $details->blog_id;

        // echo $name ." is blog ". $id." / ";

        if ( !( ( $blog->blog_id == 2 ) && ( $show_main != 1 ) ) ) {
          $class = ( $blog->blog_id == get_current_blog_id() ) ? \' current-site\' : \'\';

?>
    <li class="menu-item<?php echo $class; ?>" >
      <a href="<?php echo $addr; ?>"><?php echo $name;?> <i class="fa fa-chevron-right pull-right chervonMobNav"></i></a>
<?php

         if ( $blog->blog_id == 4 ) {

            echo \'here\';
            //show the nav for blog 4

            $pages_args = array(
              \'title_li\' => \'\',
              \'depth\' => 0
            );

            wp_list_pages( $pages_args );

         }

?>
    </li>
<?php
        }
      }
    }
?>
  </ul>
<?php
  }
?>
</div><!--/.nav-collapse -->
这里的问题是,当我单击该链接并转到该站点时,它只显示站点3中的页面。

当我在站点1和站点2时,我希望nav显示站点3中的页面

因此,每个站点的导航应该看起来像睡眠。

Site One | Site Two | Site Three
                        Site Three - page 1
                        Site Three - page 2
                        Site Three - page 3

1 个回复
SO网友:Sven

您在编写自己的查询以获取所有网站/博客方面做得很好,但您还可以使用一个特殊的WordPress功能:wp_get_sites()

如果你想从其他网站/博客获取内容,你必须首先切换switch_to_blog() 以确保查询将在正确的上下文中运行。(不要忘记使用restore_current_blog() 之后!)

话虽如此,我相应地更新了您的代码片段,因此您可以尝试一下:

<div class="navbar-collapse collapse">
  <ul class="nav navbar-nav">
    <li class="portalHome">
      <a href="dashboard.html">
        <i class="fa fa-home"></i>
        <i class="fa fa-chevron-right pull-right chervonMobNav"></i>
      </a>
    </li>
<?php

  $args = array(
    \'public\' => 1 // limit to public sites
  );
  $sites = wp_get_sites( $args );
  $current = get_current_blog_id(); // current blog id

  foreach ( $sites as $site ) :

    $site_meta = get_blog_details( $site[\'blog_id\'] );
    $current_class = $site[\'blog_id\'] == $current ? \' current\' : \'\'; // check for current site

    echo \'<li class="menu-item\' . $current_class .\'" >\';
    echo \'<a href="\' . $site_meta->siteurl . \'">\' . $site_meta->blogname . \' <i class="fa fa-chevron-right pull-right chervonMobNav"></i></a>\';

      if ( $site[\'blog_id\'] == 4 ) : // check for special site
        switch_to_blog( 4 ); // now switch to this site

          $pages_args = array(
            \'title_li\' => \'\',
            \'depth\' => 0
          );
          echo \'<ul>\';
          wp_list_pages( $pages_args );
          echo \'</ul>\';

        restore_current_blog(); // switch back to normal
      endif;

    echo \'</li>\';

  endforeach;

?>
  </ul>
</div><!--/.nav-collapse -->

结束

相关推荐

Multisite Widget/Content

我正在使用WordPress multisite,需要在侧边栏中显示所有子网站的内容。这是一个由50多个站点组成的网络,因此每隔几天用此内容更新所有50多个侧栏是不现实的。我找到的一个解决方案是简单地将我想要的内容插入侧边栏。虽然我不希望我的客户机编辑这个文件,但我希望他们使用TinyMCE编辑器而不是HTML。另一个想法是在每个子网站中嵌入一个iframe,让我的客户端更新iframe引用的页面。我的最后一个想法是用TinyMCE编辑器创建一个插件,将代码注入侧栏。php文件保存时,虽然我不知道插件是否