サポート » 使い方全般 » 投稿ループにて特定のカテゴリーを後で出力する方法

  • 解決済 non888

    (@non888)


    WordPressのループにて、募集中記事をはじめに出力し、募集終了記事を後ろに回したいと思っておりますが、このような設定は可能でしょうか?
    募集終了判定にカテゴリー付与で判別できればと思っております。

    調べてみても、特定のカテゴリーを除外や特定のカテゴリーのみを取得の方法しか見つけれず、こちらに質問させていただきました。

    • このトピックはnon888が3年前に変更しました。
5件の返信を表示中 - 1 - 5件目 (全5件中)
  • shokun0803

    (@shokun0803)

    non888さん、こんにちは。

    WP_Queryのorderbyにカテゴリーが指定できないので、検索してみるとそれぞれ工夫をしているようですね。
    ・カスタムフィールドにカテゴリーが分かる内容を転記してorderby
    ・カテゴリーごとにループを複数作る
    ・自力でループを作る(!)
    どれも一長一短のようです。

    さすがに自力ループはそれなりに力量が必要だと思いますので、ご自身で可能な方法で実装してみてはいかがでしょうか。
    最も簡単なのはループを複数作るでしょうか。

    ご参考になれば。

    トピック投稿者 non888

    (@non888)

    ご返答ありがとうございます!
    いろいろ応用させてやる方法があるんですね

    ちなみにカテゴリーごとに複数ループというのは、下記記事のようなやりかたならやったことがあるのですが、ページネーションも動作させたいとなると「orderby」のやり方が良いでしょうか?
    http://www.wp-tech.net/wordpress_tips/1484/

    shokun0803

    (@shokun0803)

    non888さん、こんにちは。

    ページネーションですが、どのような実装を考えていらっしゃるのでしょうか。
    募集中の記事が10件あったとして、1ページに5件表示すると想定し、
    ・2ページ目までは募集中のページ、以降は終了記事
    ・1ページごとに例えば募集中3件、終了記事2件などのように表示
    上記のようないくつかの表示方法が想定されますが、それによって実装も変わってくると思います。

    全体の記事をソートして、募集中→終了と並べるならおっしゃる通りorderbyが必要ですね。
    例えばカテゴリーを選択した際に、自動的にカスタムフィールドにカテゴリーが分かる何らかの記載を転記してorderbyが適切でしょうか。

    ご参考になれば。

    トピック投稿者 non888

    (@non888)

    @shokun0803

    ご返答ありがとうございます!
    ページネーションは、1ページに5件表示させる場合「募集中→終了」と表示させたいです。

    orderbyでのソートについて、それぞれの投稿に「募集開始日」「募集終了日」のフィールドをもたせ、下記コードを試したところ、投稿の古い順でそれぞれ「募集中→終了」のソートはできました。
    ですが、この「募集中」の中で「募集開始日」フィールドが古い順にしたいのですが、順番が変動しないでおります。
    「meta_query」の指定でさらに並び替えは難しいでしょうか。

    $args = array(
                'post_type' => 'test',
                'paged' => $paged,
                'meta_query' => array(
                  'relation' => 'AND',
                  's_data' => array(
                    array(
                      'key' => 'recruiting_start',
                      'compare' => 'EXISTS',
                    )
                  ),
                  'e_data' => array(
                    'key' => 'recruiting_end',
                    'compare' => 'EXISTS',
                  ),
                ),
                'orderby' => array(
                  "s_data" => "DESC",
                  "e_data" => "DESC",
                ),
              );
    $my_query = new WP_Query($args);
    トピック投稿者 non888

    (@non888)

    「r_end」という公開終了か判定するカスタムフィールドを設定し、下記コードにて「募集中→終了」の順番かつ開催日の古い順にできました。
    いろいろと助けていただきありがとうございました。

    array(
                'post_type' => 'test',
                'paged' => $paged,
                'meta_query' => array(
                  'relation' => 'OR',
                  's_data' => array(
                    'key' => 'r_end',
                    'compare' => 'NOT EXISTS',
                  ),
                  'e_data' => array(
                    'key' => 'r_end',
                    'compare' => 'EXISTS',
                  ),
                ),
                'orderby' => 's_data meta_value',
                'meta_value' => date('Y/m/d'),
                'meta_key' => 'recruiting_start',
                'meta_compare'=> '>=',
                'order' => 'ASC',
                'type' => 'DATE',
              );
5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「投稿ループにて特定のカテゴリーを後で出力する方法」には新たに返信することはできません。