web-dev-qa-db-ja.com

1回のクエリで複数のCPTから最新の3件の投稿を取得する

自分のサイトにサイト全体のフィードを作成し、複数のカスタム投稿タイプを作成することを考えています。少なくとも3つの異なる投稿タイプから3つの投稿を表示したいです。各投稿タイプで最新の10件の投稿を取得できます。また、全体で最新の10件の投稿を取得できますが、それぞれ3件のみ取得するように指定して、状況が均等になるようにします。それを行うための最良の方法は、3つの異なるクエリを実行してからそれらをマージすることですか?私はこれを個別に行う方法を理解していますが、それらをすべて統合してタイムスタンプでソートしてもらいたいのです。助言がありますか?

1
circlecube

このメソッドは、カウンタと1つのクエリを使用します。各投稿タイプから3件の投稿のみ表示できます。

$args = array(
        'post_type' =>  array( 'type1', 'type2', 'type3' ),
        'posts_per_page'    =>  -1
        );

    $myquery = new WP_Query( $args );
        $type1 = 0; $type2 = 0; $type3 = 0; $count = 0;
        while ( $myquery->have_posts() ) : $myquery->the_post();

            if ( $post->post_type == 'type1' ) $type1++; 
            if ( $post->post_type == 'type1' && $type1 > 3 ) continue;

            if ( $post->post_type == 'type2' ) $type2++; 
            if ( $post->post_type == 'type2' && $type2 > 3 ) continue;

            if ( $post->post_type == 'type3' ) $type3++; 
            if ( $post->post_type == 'type3' && $type3 > 3 ) continue;

            $count++; if ( $count > 9 ) continue;

            // Do Stuff

            endwhile;

大量の投稿がある場合、これはすべての投稿をループするため、最善の解決策にはならないかもしれません。また、指定された投稿タイプでカウントが3より大きい場合は、ループの先頭に戻ります。

1
Chris_O