web-dev-qa-db-ja.com

カスタム REST APIエンドポイントは、wp-jsonパーマリンクを介して呼び出されるとrest_no_routeを返します

私は自分のプラグインに次のコードを持っていますが、開発中は(rest_api_init内で呼ばれて)完全に問題なく動作しています。

// ?rest_route=bridge/v1/test-data/process/bbe_examples
    register_rest_route(
        'bridge/v1', '/(?P<participant>[a-zA-Z0-9-_]+)/process/(?P<section>[a-zA-Z0-9-_]+)', [
            'methods'  => 'GET',
            'callback' => [ $this->api, 'process' ],
        ]
    );

<My URL>/index.php?rest_route=/bridge/v1/test-data/process/bbe_sortables&replace&_wpnonce=<thenonce>有効になっているかどうかにかかわらず、うまく機能します。

<My URL>/wp-json/bridge/v1/test-data/process/bbe_sortables&replace&_wpnonce=<thenonce>は、呼び出されると404 rest_no_routeを返します。

これらは両方とも現在rest_url( "bridge/v1/test-data/process/" )を使用して生成されるいくつかの生成されたボタンによって呼び出されます(表示中にsectionが文字列に追加されます)。

ここで何が問題になっているのかよくわかりません。私はrest_url()で完全なURLを生成しなければならないと仮定しました、しかしブラウザまたはAPIシステムを通して直接呼ばれたとき、応答は同じです。

1
soup-bowl

問題はパーマリンクのbbe_sortables&replaceにあります。

<My URL>/wp-json/bridge/v1/test-data/process/bbe_sortables&replace&_wpnonce=<thenonce>

これは無効な経路になります。クエリ文字列は経路の一部と見なされます。

/bridge/v1/test-data/process/bbe_sortables&replace&_wpnonce=<thenonce>

(そのURLの有効な経路は/bridge/v1/test-data/process/bbe_sortablesです)

そして最後にREST AP​​I がスローされますrest_no_routeエラー。

この問題を解決するには、URLを生成するときに add_query_arg() を使用して適切なクエリ文字列を追加します。例えば rest_url() :と一緒に

$url = add_query_arg( array(
    'replace'  => 'VALUE',
    '_wpnonce' => 'VALUE',
), rest_url( 'bridge/v1/test-data/process/bbe_sortables/' ) );

/* Sample $url output:

a) Permalinks enabled
http://example.com/wp-json/bridge/v1/test-data/process/bbe_sortables/?replace=VALUE&_wpnonce=VALUE

b) Permalinks *not* enabled
http://example.com/index.php?rest_route=%2Fbridge%2Fv1%2Ftest-data%2Fprocess%2Fbbe_sortables%2F&replace=VALUE&_wpnonce=VALUE
*/

あるいは、パーマリンクがサイト上で 常に になっていると確信しているなら、これで結構です:

rest_url( 'bridge/v1/test-data/process/bbe_sortables/?replace=VALUE&_wpnonce=VALUE' )
0
Sally CJ