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

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

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

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

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark