通过wp-json固定链接调用时,自定义REST API端点返回REST_NO_ROUTE

时间:2018-10-29 作者:soup-bowl

我的插件中有以下代码,在开发过程中一直运行良好(在中调用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/" ) (thesection 在显示期间附加到字符串)。

我不完全确定这里出了什么问题。我假设我必须生成完整的URLrest_url(), 但当通过浏览器或API系统直接调用时,响应是相同的。

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

问题在于bbe_sortables&replace 在permalink中:

<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 APIthrows 这个rest_no_route 错误

要解决此问题,请使用add_query_arg() 生成URL时,附加适当的查询字符串;e、 g.带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\' )

结束