WordPress

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_bypagedで指定しておくと便利でしょう。

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

日本語ドキュメンテーションは未翻訳

原文自体も差分が出ている様子なので、プルリク出さないとです。

もうちょっと整理したら日本語ドキュメンテーションにも反映させますが、とりあえず覚書としてここにあげておきます。

ブックマークや限定記事(予定)など

WP Kyotoサポーター募集中

WordPressやフロントエンドアプリのホスティング、Algolia・AWSなどのサービス利用料を支援する「WP Kyotoサポーター」を募集しています。
月額または年額の有料プランを契約すると、ブックマーク機能などのサポーター限定機能がご利用いただけます。

14日間のトライアルも用意しておりますので、「このサイトよく見るな」という方はぜひご検討ください。

広告ここから
広告ここまで

Related Category posts