WP REST APIに追加したエンドポイントへのクエリを設定する覚書
WP REST APIでエンドポイントを追加した場合、受け付けるクエリに関する設定も行えます。 ドキュメントに乗っている例 https://v2.wp-api.org/extending/adding/ <?ph […]
目次
WP REST APIでエンドポイントを追加した場合、受け付けるクエリに関する設定も行えます。
ドキュメントに乗っている例
https://v2.wp-api.org/extending/adding/
<?php add_action( 'rest_api_init', function () { register_rest_route( 'myplugin/v1', '/author/(?P\d+)', array( 'methods' => 'GET', 'callback' => 'my_awesome_func', 'args' => array( 'id' => array( 'validate_callback' => function($param, $request, $key) { return is_numeric( $param ); } ), ), ) ); } );
この場合、https://example.com/wp-json/myplugin/v1/author/1
というリクエストを投げると、my_awesome_func
で作成されたレスポンスが返ってきます。
args
の中にはid
が指定されています。
args内のクエリ諸々
args
の中は、default
required
validate_callback
sanitize_callback
の4つが設定できます。
default
これはクエリが何も投げられなかった時に使用するデフォルト値を設定します。
order_by
やpaged
で指定しておくと便利でしょう。
required
必須のクエリを指定します。
これをtrueにすると、クエリが投げられていない場合に400エラーが返ります。
validate_callback
送信されたクエリをバリデートします。
上のサンプルコードの場合、is_numeric
でバリデートされているので数値以外の値を投げると400エラーになります。
sanitize_callback
これは送信されたクエリのサニタイズを行う値です。
esc系関数で事前にサニタイズしたい場合に使うのかなという印象です。
全部入れてみたサンプル
<?php add_action( 'rest_api_init', function () { register_rest_route( 'myplugin/v1', '/author/(?P\d+)', array( 'methods' => 'GET', 'callback' => 'my_awesome_func', 'args' => array( 'id' => array( 'validate_callback' => function($param, $request, $key) { return is_numeric( $param ); } ), 'example1' => array( 'default' => 'example_query', 'validate_callback' => function($param, $request, $key) { return is_numeric( $param ); }, 'sanitize_callback' => function($param) { return esc_attr( $param ); } ), 'example2' => array( 'required' => true, ), ), ) ); } );
エラーになるリクエスト
https://example.com/wp-json/myplugin/v1/author/1
:example2がない
https://example.com/wp-json/myplugin/v1/author/1?example1=aaaa&example2=some
:example1が数値でない。
OKなリクエスト
https://example.com/wp-json/myplugin/v1/author/1?example1=1&example2=some
日本語ドキュメンテーションは未翻訳
原文自体も差分が出ている様子なので、プルリク出さないとです。
もうちょっと整理したら日本語ドキュメンテーションにも反映させますが、とりあえず覚書としてここにあげておきます。