LoginSignup
6
6

More than 5 years have passed since last update.

WordPress REST API での検索条件設定

Posted at

やりたかったこと

カスタムフィールドの値を用いて取得結果をソートしたかった。

結論

rest_[post_type]_query フィルターフックに処理を適用することでREST APIで検索条件の設定が行えます。
例えば以下のようにフィルターフックに処理を追加することで、特定の投稿タイプ(今回はpost)の投稿一覧を取得する際に指定のカスタムフィールドの降順でソートされた結果が返ります。

add_filter('rest_post_query', function ($args, $query) {
    $args['orderby'] = 'meta_value_num'; // meta_value_numは数値として扱う、meta_valueだと文字列扱い
    $args['meta_key'] = '[カスタムフィールド名]';
    return $args;
}, 10, 2);

詳細

rest_[post_type]_query フィルターはWP_REST_Posts_Controller::get_items( WP_REST_Request $request )内(L261)で適用されています。
WP_REST_Posts_Controller::get_items()

このフィルターは引数を2つ($args, $request)を取り、$argsを返却します。
さらにこの返却された$argsがどう使われているかを見ると、L262で

L262
$query_args = $this->prepare_items_query( $args, $request );

と、prepare_items_queryという処理を経て、

L290~291
$posts_query  = new WP_Query();
$query_result = $posts_query->query( $query_args );

ここでWP_QUERY::query() の引数として用いられていることが分かります。
ここまで分かれば、実際に設定できる内容は以下のリファレンスを見れば理解できます。

WordPress 関数リファレンス/WP Query

あとは指定したい検索条件の指定方法を探して、連想配列の形で指定を行うことができます。
rest_[post_type]_queryフィルターでは$requestという引数(WP_REST_Requestインスタンス)も受け取っているので、この値を用いて特定のリクエストのみで検索条件を設定することも出来ます。

参考

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6