サポート » 使い方全般 » WP_Queryでカテゴリ順に並べたい

  • 解決済 realmccoyzz

    (@realmccoyzz)


    現在、WP_Queryを使って以下のように記事を呼び出しています(日付順で15件)。

    <?php
    WP_Query(“showposts=15”);
    while ( $the_query->have_posts() ) : $the_query->the_post();
    the_title();
    endwhile;
    wp_reset_postdata();
    ?>
    5つの投稿カテゴリが在り、以下のようにカテゴリ順に呼び出したい場合、WP_Queryのパラメータ設定で実現可能なのでしょうか?

    1、2、3、4、5、1、2、3、4、5、1、2、3、4、5

    日付順+カテゴリ順

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • モデレーター jim912

    (@jim912)

    できません。

    モデレーター のむらけい (Kei Nomura)

    (@mypacecreator)

    .カテゴリ1の新着記事1
    .カテゴリ1の新着記事2
    .カテゴリ1の新着記事3
    .カテゴリ2の新着記事1
    .カテゴリ2の新着記事2
    .カテゴリ2の新着記事3



    という順ではダメでしょうか?それならget_termsなどとの二重ループでできそうですが。。。

    トピック投稿者 realmccoyzz

    (@realmccoyzz)

    mypacecreatorさん

    有難うございます。
    その出し方は出来たのですが、当該のカテゴリ順で考えあぐねています。

    ループの組み合わせで考えています。

    モデレーター jim912

    (@jim912)

    やるのであれば、以下の手法が考えられます。

    1. カテゴリごとにget_posts
    2. for 文で0から2のループ
    3. get_postsで取得した記事の配列ごとに、forの数値の添字が存在するかを判定、存在する場合は、$post に 該当配列要素を代入し、setup_postdata をした後、 タイトルの出力
    4. ループ終了後の wp_reset_postadata

    なお、投稿が複数のカテゴリにまたがっている場合は、重複表示となる(取得済みの記事IDをexclude指定することで回避は可能)ことや、カテゴリ内の記事数が3未満であった場合、その分表示数が少なくなりますので了承してもらう必要があります。

    こんにちは、

    思いつきですが、こんな感じでどうでしょう

    <?php
    $my_query = new WP_Query("showposts=-1");
    $categories = ['aciform','UNIT TEST','Post Formats'];
    $result = [];
    $$categories[0] = 0;
    $$categories[1] = 0;
    $$categories[2] = 0;
    
    	while ( $my_query->have_posts() ) : $my_query->the_post();
    		foreach( $categories as $key=>$cat ) {
    
    			if( has_category( $cat, $post ) && $$cat < 5 ){
    				//日付優先で、カテゴリーマーカーを付けて表示
    				the_title($cat.': '.'<span>','</span><br />');
    				//カテゴリー配列に投稿を格納
    				$result[ $cat ][ $post->ID ] = the_title('<span>','</span>',false );
    				$$cat++;
    			}
    		}
    	endwhile;
    	wp_reset_postdata();
    
    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>"
      }
    }
    ?>

    他には、

    https://ja.forums.wordpress.org/topic/123099?replies=9

    等はどうでしょう

    コードは全記事ループなので、取得が終わったらbreakするような処理を入れるといいと思います。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「WP_Queryでカテゴリ順に並べたい」には新たに返信することはできません。