将多个标签插件传递给REST API

时间:2021-06-11 作者:user205932

我可以将单个标记slug传递给WP-restapi。但是,无法传递多个标记slug。它给出了一个错误-请求是向wp-json/w1/unica/posts/unica-12-1&interact 错误消息为:

找不到与URL和请求方法匹配的路由。

我的代码:

register_rest_route( \'w1/page_name/\', \'posts/(?P<slug>[a-z0-9]+(?:-[a-z0-9]+)*)\', array(
  \'methods\' => \'GET\',
  \'callback\' => \'page_name_get_posts_by_tag\',
  \'args\' => array(
      \'slug\' => array (
          \'required\' => true
      ),
      
  )
));

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

您收到错误是因为URL格式无效-这& 因为没有? 在URL中:wp-json/w1/unica/posts/unica-12-1&interact, 但即使您实际上添加了?, 这不是向API传递多个段塞的方法。

那么,如何将多个slug传递给自定义端点呢

register_rest_route( \'w1/page_name/\', \'posts/(?P<slug>[a-z0-9]+(?:-[a-z0-9]+)*)\', ... );
这是您的代码,这意味着路由使用的路径变量的形式为/(?P<parameter name><regular expression pattern>) 在您的情况下,参数名称是slug 它接受由字母数字和破折号组成的单个slug值(-) 只有个字符,因此您应该只通过一个slug。

但实际上可以发送多个弹头,例如。/wp-json/w1/page_name/posts/some-string?slug[]=unica-12-1&slug[]=interact/wp-json/w1/page_name/posts/some-string?slug=unica-12-1,interact, 其中第一个使用数组格式(即。slug[]).

但是some-string 必须存在,因为路径变量的形式必须为posts/<slug here>, 因此,您可以删除path变量,或者更改RegEx模式,使其允许使用逗号分隔多个段塞,然后在主回调中(在page_name_get_posts_by_tag() 函数),您可以使用explode() 将段塞字符串转换为段塞数组。

例如(?P<slug>[a-z0-9]+(?:-[a-z0-9]+)*), 你可以试试(?P<slug>([\\w\\-],?)+) 然后向/wp-json/w1/page_name/posts/unica-12-1,interact, 然后查看是否仍出现相同的错误(“未找到与URL和请求方法匹配的路由”。)。