<?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>" } }