如何通过WP_Query()将自定义帖子类型的嵌套循环用于多站点博客

时间:2016-02-05 作者:Ryan Dorn

我用的是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()搞砸了?(这是我的怀疑)。

提前感谢您的任何见解!

1 个回复
最合适的回答,由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();

相关推荐

ACF Taxonomy in Loop

你好吗我的问题是,我在头版上显示了一些卡片,例如名称和描述,这些信息来自我的分类法event,因为我用ACF创建了一些字段,我想在卡片中打印它们,但我不知道怎么做。下面是我如何打印卡片的代码 <?php if(is_front_page()): $terms = get_terms( [ \'taxonomy\' => \'evento\', \'hide_empty\' =>