【WordPress】WP_Queryでカスタムフィールド複数条件でソート(並び順)指定する方法を解説
この記事は、最初の投稿から2年以上が経過しています。
最終更新から991日が経過しています。
「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のカスタムフィールド複数の並び順指定について解説しています。
単一ソート条件 指定
まずは、一般的な並び順指定の方法です。
コード
$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内に指定したキー(名前)を指定する
- 優先は上から