web-dev-qa-db-ja.com

Wordpress Rest APIカスタムエンドポイントのオプションパラメータ

Urlでregister_rest_route()をオプションのパラメータと共に使用することは可能ですか?

ルートがこのように登録されているとしましょう:

register_rest_route( 'api', '/animals/(?P<id>\d+)', [
   'methods' => WP_REST_Server::READABLE,
   'callback' => 'get_animals',
   'args' => [
        'id'
    ],
] );

/wp-json/api/animals/15 のようにURLでapi呼び出しを実行できるようになりましたが、 /wp-json/api /のようにルートをキャッチするオプションとしてパラメータを宣言する方法もあります。動物/

私はまた、以下のようにルートを宣言しようとしましたが、成功しませんでした。

/animals/(?P<id>\d+)?

パラメータなしで別のルートを宣言するか、またはGETパラメータを利用することができますが、これをregister_rest_route()で既に行う方法はありますか?

あなたの提案をありがとう。

9
rozklad

Route regexの名前付きパラメータをオプションのキャプチャグループに入れるべきです:

register_rest_route( 'api', '/animals(?:/(?P<id>\d+))?', [
   'methods' => WP_REST_Server::READABLE,
   'callback' => 'get_animals',
   'args' => [
        'id'
    ],
] );

2番目のパラメータは単に正規表現です。したがって、 通常の正規表現ロジック を使用して複雑にすることができます。

9

1つのregister_rest_route関数呼び出しでそれをする方法があるかもしれません、私はそれをする方法を知りません、そして、それは 理想的です 。しかし、フックされたメソッド内でregister_rest_route関数呼び出しを複製することはあなたが望むことをするでしょう。

register_rest_route( 'api', '/animals/', [
   'methods' => WP_REST_Server::READABLE,
   'callback' => 'get_animals'
] );

register_rest_route( 'api', '/animals/(?P<id>\d+)', [
   'methods' => WP_REST_Server::READABLE,
   'callback' => 'get_animals',
   'args' => [
        'id'
    ],
] );

それぞれのケースを処理する条件を持たせるのがget_animalsメソッドです。 id引数が設定されているかどうか、そしてフォールバックが$_GET変数をチェックしているかどうか。

2
jackreichert