複数キーでのソートについて、私は試していませんが、下記の記事が参考になるかと思います。
WordPress 4.2 から可能になった、カスタムフィールドの複数ソート
Query improvements in WP 4.2: ‘orderby’ and ‘meta_query’
ふたつ目の記事は英語ですが、こちらの方が読みやすいかもです。
イベントの日付については、私なら開始日と終了日で別のフィールドを設定するかなと思います。
ありがとうございます。
日本語のリンク先や色々と見ていたのですが、未だによく分かりません…教えて頂いた英語サイトの方が分かりやすいのは確かですが..
orderbyが’meta_value”meta_value_num’、orderが’DESC”ASC’であったものが、複数ソートになるとorderbyが’DESC”ASC’になるのが、謎すぎて..
あれから、これらのリンク先
WordPressで指定したカスタムフィールドが存在しない場合の投稿一覧を取得する方法
get_postsで、複数のカスタムフィールドをキーにして検索・取得する方法
を参考にして、
‘meta_value’ => ‘null’,
‘meta_compare’ => ‘!=’
や
‘meta_compare’ => ‘NOT EXISTS’
と試しましたが、そもそもnumberを記入した記事しか表示されていないので、別のところがおかしいのでしょうか。
$args =array(
'orderby' => array (
'day' => 'DESC',
'number' => 'ASC'
),
'meta_query' => array(
array(
'key'=>'number',
'meta_value' => 'null',
'meta_compare' => '!='
),
array(
'key'=>'day',
'meta_compare' => 'NOT EXISTS'
)
)
);
イベントの終了日の設定は、別項目として設けたいと思います。
ありがとうございます。
一応手元で試したのですが、下記のようにしてソートできました。
numberフィールドについては必須として、デフォルト値を100みたいな運用を想定しました。優先させたいものは小さい数値を指定するイメージです。
$args = array(
'meta_query' => array(
'relation' => 'AND',
'meta_number' => array(//ソート用のラベルを設定
'key' => 'number',//特にクエリの条件は不要かと
),
'meta_day' => array(//ソート用のラベルを設定
'key' => 'day',//こちらもクエリの条件は不要かと
),
'meta_endday' => array(//新しくイベント終了日フィールド(デートピッカー)を設定する。本日以降に終了するイベントのみ取得
'key' => 'endday',
'compare' => '>=',
'value' => date("Y-m-d"),
'type' => 'DATE',
),
),
'orderby' => array (//先に設定したソート用のラベルを使用してソート順を設定
'meta_number' => 'ASC',
'meta_day' => 'DESC',
),
);
$query = new WP_Query( $args );
ありがとうございます。
‘relation’ => ‘AND’が肝だったのですね..
‘meta_カスタムフィールド名’でも実装できるとは、初めて知りました。
勉強になります。
教えていただいたもので十分実装できたのですが、もしよろしければ以下も教えて頂ければ幸いです。
試しにmeta_queryを以下のようにすると、優先順位のソートはできたものの、開催日でのソートがうまく実装できなかったのですが、
array(
‘key’ => ‘number’,
),
と
‘meta_number’ => array(
‘key’ => ‘number’,
),
では設定しているものが違うのでしょうか…?
$args = array(
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'number',
),
array(
'key' => 'day',
),
array(
'key' => 'endday',
'compare' => '>=',
'value' => date("Y-m-d"),
'type' => 'DATE',
)
),
'orderby' => array (
'number' => 'ASC',
'day' => 'DESC',
),
);
少し勘違いさせてしまったかもしれないですが、’meta_カスタムフィールド名’で実装しているわけではないです。
meta_numberとmeta_dayは単純に最後のorderbyで指定するためのラベルで、文字列としてはhogeとかfugaとかなんでも大丈夫です。
WP4.2からこの複数のカスタムフィールド値でのソートができるようになったようですが、そのために
'meta_number' => array(
'key' => 'number',
),
のような設定方法が必要になっています。
ですので、お書きになられているmeta_queryの書式では複数のカスタムフィールド値でのソートはできません。
なるほど、ありがとうございます。
複数ソートの場合はこれまでの書き方から変えないといけないのですね。
とてもよくわかりました!
お忙しい中教えていただき、大変助かりました。
どうもありがとうございます。