最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

multisite - Display posts from one network site on another

programmeradmin0浏览0评论

I've got to be missing something very basic here. I want to display posts from one site on another. No custom queries (yet), just the plain old posts.

if ( get_current_blog_id() == 1 ) :
    // do regular main site stuff;
elseif ( get_current_blog_id() == 6 ) :
    switch_to_blog( 1 );
    // pull in posts from main blog
    if ( have_posts() ) :
        while ( have_posts() ) :
            the_post();
            get_template_part( 'content/post' );
        endwhile;
    endif;
    restore_current_blog();
else :
    // nothing special
endif;

When I try this, I get the post data from the site I'm trying to pull into (site 6) rather than site 1. I can echo get_current_blog_id() while in the loop, and it tells me I'm in site 1, but the post content ends up coming from from site 6.

I've got to be missing something very basic here. I want to display posts from one site on another. No custom queries (yet), just the plain old posts.

if ( get_current_blog_id() == 1 ) :
    // do regular main site stuff;
elseif ( get_current_blog_id() == 6 ) :
    switch_to_blog( 1 );
    // pull in posts from main blog
    if ( have_posts() ) :
        while ( have_posts() ) :
            the_post();
            get_template_part( 'content/post' );
        endwhile;
    endif;
    restore_current_blog();
else :
    // nothing special
endif;

When I try this, I get the post data from the site I'm trying to pull into (site 6) rather than site 1. I can echo get_current_blog_id() while in the loop, and it tells me I'm in site 1, but the post content ends up coming from from site 6.

Share Improve this question asked Jun 10, 2020 at 19:55 nickfindleynickfindley 1836 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 0

You are looping through the posts queried before your switch_to_blog() statement. Your code appears to be from a page template which is executed AFTER the main query has run.

To be clear, the main query is run before the template code is executed. Switching to another site after that does not update the query, therefore your loop is iterating through the original blog (#6).

Try something like this instead:

  switch_to_blog( 1 );
  // pull in posts from main blog
  $query = new WP_Query();

  if ( $query->have_posts() ) {
      while ( $query->have_posts() ) :
        $query->the_post();
        get_template_part( 'content/post' );
      endwhile;
   wp_reset_postdata();
  } else {
  // none were found
  }

  restore_current_blog();

EDIT: updated to use OP's original loop and template part. EDIT 2: clarified order of execution in the first few sentences.

发布评论

评论列表(0)

  1. 暂无评论