WordPress REST API自定义终结点可选参数

时间:2017-01-26 作者:rozklad

是否可以使用register_rest_route() url中是否有可选参数?

假设路线是这样注册的:

register_rest_route( \'api\', \'/animals/(?P<id>\\d+)\', [
   \'methods\' => WP_REST_Server::READABLE,
   \'callback\' => \'get_animals\',
   \'args\' => [
        \'id\'
    ],
] );
现在可以对url执行api调用,如/wp-json/api/animals/15, 但是,有没有一种方法可以将param声明为可选的,以同时捕获如下路由/wp-json/api/animals/.

我还尝试按以下方式宣布路线,但没有成功:

/animals/(?P<id>\\d+)?
您可以在没有参数的情况下声明另一个路由,也可以使用GET params,但是在register_rest_route() ?

谢谢你的建议。

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

您应该将路由regex的命名参数放入可选的捕获组中:

register_rest_route( \'api\', \'/animals(?:/(?P<id>\\d+))?\', [
   \'methods\' => WP_REST_Server::READABLE,
   \'callback\' => \'get_animals\',
   \'args\' => [
        \'id\'
    ],
] );
第二个参数只是一个regex,因此您可以使用normal regex logic 使其更加复杂

SO网友:jackreichert

也许有一种方法可以做到这一点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\\u animals方法,您需要有处理每个案例的条件。如果id arg已设置,并且回退检查$_GET 变量。

相关推荐

创建帖子,包含来自远程API的数据

我需要一些帮助和指导。因此,我正在开发一个网站(自定义主题),目标是从远程API获取数据。我希望能够将数据存储在各个帖子中(一种自定义帖子类型),当有人向远程API添加或删除数据时,它应该会更新网站上的帖子。我使用的API的结构如下:https://pippinsplugins.com/edd-api/products我知道如何从中获取数据并解码JSON等。$url = \'https://pippinsplugins.com/edd-api/products\'; $username