カテゴリー毎の投稿の表示考

<?php
$my_query			= new WP_Query( "showposts=-1" );
$categories			= ['aciform', 'UNIT TEST', 'Post Formats' ];
$result				= [];
//カウンターの初期値
foreach ( $categories as $cat ) {
	$$cat= 0;
}
$num_posts			= 5;

while ( $my_query->have_posts() ) : $my_query->the_post();
	foreach ( $categories as $cat ) {

		if ( has_category( $cat, $post ) && $$cat < $num_posts ) {
			//日付優先で、カテゴリーマーカーを付けて表示
			the_title($cat.': '.'<span>','</span><br />');
			//カテゴリー配列に投稿を格納
			$result[ $cat ][ $post->ID ]= the_title( '<span>', '</span>', false );
			$$cat++;
		}
	}

	if ( count( $categories, COUNT_RECURSIVE ) - count( $categories )== count( $categories ) * $num_posts ) {
		break;
	}

endwhile;
wp_reset_postdata();
?>

[‘aciform’,’UNIT TEST’,’Post Formats’] は、array(‘aciform’,’UNIT TEST’,’Post Formats’) と同じ意味です。(PHP5.4~)

$$categories[0] は、$aciform と同じ意味です。ループ内でカウントするために可変変数を使っています。

上記のコードが走ると、カテゴリ:投稿タイトル それぞれ、5件表示されます。

カテゴリー別に分ける場合は、$resultの配列から、リストを表示してやると、カテゴリー別に並ぶ表示が出来ます。

var_dump( $result );

array(3) {
 ["aciform"]=>
 array(5) {
 [37296]=>
 string(23) "<span>color test</span>"
 [37288]=>
 string(17) "<span>test</span>"
 [36550]=>
 string(17) "<span>test</span>"
 [36548]=>
 string(17) "<span>test</span>"
 [35550]=>
 string(181) "<span>アイキャッチとタイトルの確認</span>"
 }
 ["UNIT TEST"]=>
 array(5) {
 [36209]=>
 string(23) "<span>Modal Form</span>"
 [36206]=>
 string(26) "<span>modal gallery</span>"
 [36204]=>
 string(23) "<span>modal list</span>"
 [36199]=>
 string(24) "<span>modal table</span>"
 [36073]=>
 string(23) "<span>font sizes</span>"
 }
 ["Post Formats"]=>
 array(5) {
 [24557]=>
 string(34) "<span>Post Format: Standard</span>"
 [24559]=>
 string(33) "<span>Post Format: Gallery</span>"
 [1031]=>
 string(41) "<span>Post Format: Gallery (Tiled)</span>"
 [1158]=>
 string(31) "<span>Post Format: Image</span>"
 [24606]=>
 string(41) "<span>Post Format: Image (Caption)</span>"
 }
}

関連