我用的是miguelpeixe的代码\'WordPress Query Multisite\' 为了为我的WP多站点的“子站点”创建自定义循环在此循环中,我想嵌套另一个循环,该循环将从该子站点提取自定义帖子类型,如:
Site 1
CPT 1
CPT 2
Site 2
CPT 3
CPT 4
实际上,我能够让循环正常工作,并能够拉取子自定义帖子类型。但是,循环正在重复一个子站点。我不确定我是否遗漏了一些明显的bug或什么,下面是我正在使用的代码:
<?php
$args_outer = array(
\'multisite\' => 1,
\'sites__not_in\' => array(1),
);
$child_site_query = new WP_Query( $args_outer );
while($child_site_query->have_posts()) : $child_site_query->the_post(); global $blog_id; // START: Outer Loop
// --------------------------------------------------
switch_to_blog($blog_id);
$args_inner = array(
\'post_type\' => \'my_cpt\'
);
$child_cpts_query = new WP_Query( $args_inner );
while($child_cpts_query->have_posts()) : $child_cpts_query->the_post(); // START: Inner Loop
// Variables
$child_cpt_id = get_the_ID ();
$child_cpt_thumbnail = get_post_meta( $child_cpt_id, \'_thumbnail_id\', true );
$child_cpt_permalink = get_the_permalink();
?>
<!-- START: HTML -->
<div class="col-md-3">
<h3>
<a href="<?php echo($child_cpt_permalink);?>">
<?php echo $blog_id; ?><br>
<?php echo $child_cpt_id; ?> -
<?php echo get_the_title(); ?>
</a>
</h3>
</div>
<!-- END: HTML -->
<?php
endwhile; // END: Inner Loop
wp_reset_postdata();
restore_current_blog();
// --------------------------------------------------
endwhile; // END: Outer Loop
wp_reset_postdata();
?>
我是不是把内部循环中的wp\\u reset\\u postdata()或restore\\u current\\u blog()搞砸了?(这是我的怀疑)。
提前感谢您的任何见解!
最合适的回答,由SO网友:fischi 整理而成
这个插件已经为您提供了每个站点的帖子列表,但它并不完全满足您的需要。
基本上,它会为您提供网络中所有帖子的列表。之后你需要做的是对它们进行排序site_id
并为此创建输出。
我不知道这是否是最好的版本,但由于WP\\u Query返回一个一维数组,您需要其他东西来对其进行分组和排序site_id
$args_outer = array(
\'multisite\' => 1,
\'sites__not_in\' => array(1),
\'post_type\' => \'my_cpt\',
\'numberposts\' => -1,
\'posts_per_page\' => -1
);
$child_site_query = new WP_Query_Multisite( $args_outer );
while($child_site_query->have_posts()) : $child_site_query->the_post();
global $blog_id, $post;
$blogs[$blog_id][] = $post; // create array with first parameter blogid, and the posts inside
// --------------------------------------------------
endwhile; // END: Outer Loop
wp_reset_postdata();
// loop through all blogs
foreach( $blogs as $thisblog => $posts ) {
// switch to this blog and create output
switch_to_blog( $thisblog );
echo \'Site \' . $thisblog . \'<br /><ul>\';
// loop through all posts on this blog
foreach( $posts as $thispost ) {
echo \'<li><a href="\' . get_permalink( $thispost->ID ) . \'">\' . $thispost->post_title . \'</a></li>\';
}
echo \'</ul>\';
}
restore_current_blog();