私は自分のプラグインに次のコードを持っていますが、開発中は(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システムを通して直接呼ばれたとき、応答は同じです。
問題はパーマリンクの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 API がスローされます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' )