質問: ### 前提・実現したいこと wordpressにてウェブサイトを構築しています。 記事を書くためのユーザーを複数設定して、そのユーザーが特定のカテゴリに投稿した記事をトップページに表示させたいのですが、投稿順にひとりのユーザーの記事がたくさん表示されるのではなく、各ユーザーの投稿がいくつあっても最新のものだけを表示させたいと考えています。 例: ユーザーA 投稿数10 ユーザーB 投稿数4 ユーザーC 投稿数5 ユーザーD 投稿数1 それぞれ投稿があったとして、以下のソースだと 11.01 ユーザーAの投稿 10.30 ユーザーCの投稿 10.29 ユーザーAの投稿 10.28 ユーザーAの投稿 となるところを、 11.01 ユーザーAの投稿 10.30 ユーザーCの投稿 10.21 ユーザーBの投稿 10.04 ユーザーDの投稿 それぞれのユーザーの最新投稿が表示されるようなものとしたいと考えています。 ### 該当のソースコード 〜〜 'category', //特定のカテゴリースラッグを指定 'posts_per_page' => 4 //取得記事件数 )); foreach( $newslist as $post ): setup_postdata( $post ); ?> 〜〜 ### 試したこと 'author'の要素を使用すればいいのかと考え、get_postsのパラメータに加えたりしたり、foreachに条件分岐を加えたりしてみましたが、うまくいかずでした。 ### 補足 最新版のwordpressをmampのlocal環境で構築しています。 不足している情報などありましたら教えていただけますと幸いです。 みなさまの知恵を貸してください。よろしくお願いいたします。
回答: `get_posts()` では難しいと思います。代わりに `get_posts()` が内部的に使用している `WP_Query` を使うことで実現できます。 ``` add_filter( 'posts_groupby', function ( $groupby ) { global $wpdb; return "{$wpdb->posts}.post_author"; } ); $query = new WP_Query( [ 'post_type' => 'post', 'category_name' => 'category', 'posts_per_page' => 4, ] ); if ( $query->have_posts() ) { while ( $query->have_posts() ) { $query->the_post(); // $post 変数を使う } } else { echo '記事がありません'; } ```