ワードプレスの絞込検索をする時、sqlを書ける人は直接データベースを触るのが簡単だと思います、私も複雑な検索の場合はそうしてきました。
今回はページ送りが面倒でしたのでwordpressのタグに頼ることにしました。
meta_queryで検索をかけても、目的が達成できなかったので、探している人もいるかと思います。
pre_get_postsにフックして使います。
今回はワードプレスの関数だけで、特定のカスタムフィールドで検索して別のカスタムフィールドの値で並べ変える方法です。
今回は動的にカスタムフィールドのキーを変える必要がありましたので変数をいくつか使っています。
サニタイズは別途する必要があります。
$paged = (get_query_var('paged')) ?: 1;
$args = array(
'paged' => $paged,
'post_type' => 'post',
'meta_key' => $fieald, //並べ替えに指定するカスタムフィールドのキー
'meta_query' => array(
'w'=>array( 'key'=>$key,), //wは検索する条件の名前、なんでもよい。後で必要になる時もある。
'f'=>array( 'key'=>$fieald,), //fは検索する条件の名前、なんでもよい。今回は後で使います。
'relation'=>'OR' //ORかAND状況で選択
),
'posts_per_page' => $num, //ワードプレスの管理画面での設定と違う場合に必要。
//かつ、この場合は検索するカスタムフィールドの値で抽出する記事数が変動したので変数を使用。
'orderby'=>array('f'=>'DESC'), //ここが今回のポイント。この条件で並べ替えます。複数指定することも可能です。
);
今回参考にしたサイトは本家のサイトです。名前を付けるというところを参考にしました。
関数リファレンス/WP Query – WordPress Codex 日本語版