使用多个参数注册获取REST API路由

时间:2021-03-21 作者:leemon

我正在尝试使用以下代码注册具有多个参数的GET-REST API路由:

register_rest_route( \'myplugin/v1\', \'/posts/?number=(?P<number>[\\d]+)&amp;offset=(?P<offset>[\\d]+)&amp;total=(?P<total>[\\d]+)\', array(
    \'methods\'             => \'GET\',
    \'callback\'            => \'my_rest_function\',
    \'permission_callback\' => \'__return_true\',
    \'args\'                => array(
        \'number\' => array(
            \'validate_callback\' => function( $param, $request, $key ) {
                return is_numeric( $param );
            }
        ),
        \'offset\' => array(
            \'validate_callback\' => function( $param, $request, $key ) {
                return is_numeric( $param );
            }
        ),
        \'total\' => array(
            \'validate_callback\' => function( $param, $request, $key ) {
                return is_numeric( $param );
            }
        ),
    ),
) );
但是,当我使用以下方法调用它时:

https://example.com/wp-json/myplugin/v1/posts/?number=3&offset=0&total=3

我得到一个No route was found matching the URL and request method. 错误

我做错了什么?

2 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

您不需要在端点中包含查询参数。仅路径:

register_rest_route( \'myplugin/v1\', \'/posts\', array(
    \'methods\'             => \'GET\',
    \'callback\'            => \'my_rest_function\',
    \'permission_callback\' => \'__return_true\',
    \'args\'                => array(
        \'number\' => array(
            \'validate_callback\' => function( $param, $request, $key ) {
                return is_numeric( $param );
            }
        ),
        \'offset\' => array(
            \'validate_callback\' => function( $param, $request, $key ) {
                return is_numeric( $param );
            }
        ),
        \'total\' => array(
            \'validate_callback\' => function( $param, $request, $key ) {
                return is_numeric( $param );
            }
        ),
    ),
) );

SO网友:rexkogitans

请求应该是正则表达式,而不是HTML编码的。因此&amp; 简单使用&.

此外? URL查询开始时被解释为正则表达式的一部分,这意味着前面的/ 是可选的。你必须逃离它:

\\/帖子\\/?数字=(?P[\\d]+)&;偏移=(?P[\\d]+)&;总计=(?P[\\d]+)

当然,你也可以避开斜杠,但这在这里是不必要的。

你可以测试你的正则表达式at Regex101.

相关推荐

我可以在纯固定链接格式上使用REST-API吗?

最近,我所有的REST-API请求都突然返回404错误,每个请求(无论是自定义端点还是内置的)。然后我想这是因为permalink的结构。/wp-json/ 在普通permalink下无法访问,因为目前根本没有可用的重定向规则。在这种情况下是否可以使用REST端点?自定义和内置。