一覧ページの記事の並び順を複数のカスタムフィールドの値で制御する

この記事ではソートを複数のカスタムフィールドで制御したい場合についての解説です。

この記事を読み前に

記事の表示順をカスタムフィールドの値で制御する をご参照ください。

たとえば、投稿に紐づけるカスタムフィールド(型は「数値」)
・field_a
・field_b
を用意し、まず field_a の値の大きい順に並び、field_a の値が同じ場合は field_b の値の小さい順に並ぶような記事一覧を取得する場合。
 
以下に記事取得のところだけ記述します。


$the_query = new WP_Query(array(
  'post_status' => 'publish',
  'post_type' => 'post',
  'posts_per_page' => -1,
  'orderby' => array(
    'condition_a' => 'DESC',
    'condition_b' => 'ASC'
  ),
  'meta_query' => array(
    'relation' => 'AND',
    'condition_a' => array(
      'key' => 'field_a',
      'type' => 'numeric',
    ),
    'condition_b' => array(
      'key' => 'field_b',
      'type' => 'numeric',
    ),
  ),
));

meta_query のところでカスタムフィールドの条件に名前を付けて、orderby でその[条件名]と[降順昇順の指定]を配列にして並べる。このとき配列は優先したい条件のほうを前に記述すること。
 
これだけですって。

orderby って配列にできたんですね。私も最近まで知りませんでした(WordPress バージョン4以降かららしいです)。