ハシウェブ

Web制作、プログラミングに関する情報を発信するブログ

【WordPress】WP_Queryでカスタムフィールド複数条件でソート(並び順)指定する方法を解説

【WordPress】WP_Queryでカスタムフィールド複数条件でソート(並び順)指定する方法を解説

「WordPressで複数の条件で並び順を指定するにはどうしたらいいの?」

「WordPressのカスタムフィールド複数条件で並び順を指定したい」

悩み

こんな悩みにお答えします。

WP_Queryで条件指定する場合、以下のように指定すると複数の並び順を指定できます。

$args = array(
  "post_type" => "post",
  "posts_per_page" => 20,
  "paged" => $paged,
  "meta_query" => array(
    "relation" => "AND",
    "a" => array(
      "key" => "group",
    ),
    "b" => array(
      "key" => "kana",
    ), 
  ),
  "orderby" => array( 
    "a" => "ASC",
    "b" => "DESC",
  ),
);
$wp_query = new WP_Query( $args );

私は、2015年からWeb制作の仕事をはじめて、170件ほどのWebサイトを制作してきました。
そのうちのほとんどがWordPressです。
いろいろな失敗を繰り返し、クライアントからのフィードバックや本などで勉強することにより、多くのノウハウを得ることができました。

この記事では、WP_Queryのカスタムフィールド複数の並び順指定について解説しています。

目次
  1. 単一ソート条件 指定
    1. コード
    2. 解説
  2. 複数ソート条件 指定
    1. コード
    2. 解説
  3. まとめ

単一ソート条件 指定

まずは、一般的な並び順指定の方法です。

コード

$args = array(
  "post_type" => "post",
  "posts_per_page" => 20,
  "paged" => $paged,
  "meta_query" => array(
    "relation" => "AND",
    array(
      "key" => "group",
    ),
    array(
      "key" => "kana",
    ), 
  ),
  "orderby" => "kana",
  "order" => "ASC",
  ),
);
$wp_query = new WP_Query( $args );

解説

WordPressで複雑な検索をする場合はWP_Queryを使います。

WP_Queryの条件を細かく指定していきます。

WP_Queryの条件に、カスタムフィールドを指定する場合は、「meta_query」を使います。

「relation」は複数条件をOR,ANDなどどうつなぐかの指定です。

「relation」以外の条件にキーは不要です。

  "meta_query" => array(
    "relation" => "AND",
    array(
      "key" => "group",
    ),
    array(
      "key" => "kana",
    ), 
  ),

単一条件で並び順を指定する場合は、orderbyに指定するカスタムフィールドのキー、orderにASC(昇順)、DESC(降順)のどちらかを指定します

  "orderby" => "kana",
  "order" => "ASC",

複数ソート条件 指定

WP_Query カスタムフィールドの複数条件でのソート指定方法です。

コード

$args = array(
  "post_type" => "post",
  "posts_per_page" => 20,
  "paged" => $paged,
  "meta_query" => array(
    "relation" => "AND",
    "a" => array(
      "key" => "group",
    ),
    "b" => array(
      "key" => "kana",
    ), 
  ),
  "orderby" => array( 
    "a" => "ASC",
    "b" => "DESC",
  ),
);
$wp_query = new WP_Query( $args );

解説

「relation」以外の条件にわかりやすい名前でキーを指定します。

ここでは仮に「a」「b」という名前にしています。
※逆にわかりにくいですが、ここではgroup、kanaとはっきり区分するためにa、bとしています

  "meta_query" => array(
    "relation" => "AND",
    "a" => array(
      "key" => "group",
    ),
    "b" => array(
      "key" => "kana",
    ), 
  ),

orderbyを複数指定するため、値を配列にし、条件を指定します。

配列内のキーにmeta_queryで指定したキーを指定します。

並び順の優先は上からになります。

a = group、 b = kanaなので、「groupは昇順、その条件にあう中で、kanaを降順で並べる」ということになります。

  "orderby" => array( 
    "a" => "ASC",
    "b" => "DESC",
  ),

個人的に、「複数条件でもorderbyのキーにカスタムフィールドのキーをそのまま指定すればいいのかな」と思ってしまって時間がかかりました。

複数条件でもキーにカスタムフィールドのキーを指定すればいいのかなと思ってしまっていました。

POINT

「meta_query配列内のキー」を、「orderby配列内のキー」に指定する。

「カスタムフィールドのキー」を、「orderby配列内のキー」に指定しない

以下の記事などを参考にしました。

まとめ

WP_Queryでカスタムフィールド複数条件でソート(並び順)指定する方法について解説しました。

  • meta_query内の条件にキー(名前)を指定する
  • orderbyの値を配列にして、条件のキーにmeta_query内に指定したキー(名前)を指定する
  • 優先は上から