non888さん、こんにちは。
WP_Queryのorderbyにカテゴリーが指定できないので、検索してみるとそれぞれ工夫をしているようですね。
・カスタムフィールドにカテゴリーが分かる内容を転記してorderby
・カテゴリーごとにループを複数作る
・自力でループを作る(!)
どれも一長一短のようです。
さすがに自力ループはそれなりに力量が必要だと思いますので、ご自身で可能な方法で実装してみてはいかがでしょうか。
最も簡単なのはループを複数作るでしょうか。
ご参考になれば。
ご返答ありがとうございます!
いろいろ応用させてやる方法があるんですね
ちなみにカテゴリーごとに複数ループというのは、下記記事のようなやりかたならやったことがあるのですが、ページネーションも動作させたいとなると「orderby」のやり方が良いでしょうか?
http://www.wp-tech.net/wordpress_tips/1484/
non888さん、こんにちは。
ページネーションですが、どのような実装を考えていらっしゃるのでしょうか。
募集中の記事が10件あったとして、1ページに5件表示すると想定し、
・2ページ目までは募集中のページ、以降は終了記事
・1ページごとに例えば募集中3件、終了記事2件などのように表示
上記のようないくつかの表示方法が想定されますが、それによって実装も変わってくると思います。
全体の記事をソートして、募集中→終了と並べるならおっしゃる通りorderbyが必要ですね。
例えばカテゴリーを選択した際に、自動的にカスタムフィールドにカテゴリーが分かる何らかの記載を転記してorderbyが適切でしょうか。
ご参考になれば。
@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);
「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',
);