Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
5
Help us understand the problem. What is going on with this article?
@K_ichi

WordPress REST API での検索条件設定

More than 1 year has passed since last update.

やりたかったこと

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

結論

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インスタンス)も受け取っているので、この値を用いて特定のリクエストのみで検索条件を設定することも出来ます。

参考

5
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
5
Help us understand the problem. What is going on with this article?