WordPress自定义终结点多个参数

时间:2020-04-10 作者:Marcius Leandro

我试图在我的存储中创建一个路由,以接收来自API的通知,但每次我测试我创建的路由时,都会收到以下错误消息No route was found matching the URL and request method

function notifications_cbt_func($request) {
     return $request;
}

add_action(\'rest_api_init\', function () {
     register_rest_route( \'cbt-api/v1\', \'/notifications/\', array(
       \'methods\' => \'GET\',
       \'callback\' => \'notifications_cbt_func\',
     ) );
});
当我通过邮递员打电话时,总是会出现以下错误

GET: https://planetmusicexpress.com/wp-json/cbt-api/v1/notifications/?merchant_id=765&resource=\\/orders\\/MBR010131&topic=orders
我的这段代码在我创建的插件中,我确信我的插件正在工作,因为我在与这段代码相同的文件中调用了其他插件。有人知道我做错了什么吗?

我知道我的路线有效,因为它出现在这里https://planetmusicexpress.com/index.php/wp-json

我不知道的是在get上装入她的调用,或者装入正则表达式,使其看起来与get上的一样

EDIT

function notifications_cbt_func($request) {
     $merchant_id = $request->get_param( \'merchant_id\' );
     $resource    = $request->get_param( \'resource\' );

     // Get all the parameters:
     $params = $request->get_params();

     return json_encode($$params);
}

add_action(\'rest_api_init\', function () {
     register_rest_route( \'cbt-api/v1\', \'/notifications/\', array(
       \'methods\' => \'GET\',
       \'callback\' => \'notifications_cbt_func\',
     ) );
});

add_action(\'rest_api_init\', function () {
     register_rest_route( \'cbt-api/v1\', \'/notifications/\', array(
       \'methods\' => \'POST\',
       \'callback\' => \'notifications_cbt_func\',
     ) );
});
我在响应中进行了建议的更改,但当我这样做时,我的路径get和post都返回null:

https://planetmusicexpress.com/wp-json/cbt-api/v1/notifications/?merchant_id=765&resource=MBR010131&topic=orders

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

正如我在评论中所说endpoint 对我来说很好。

你说,

我设法停止给出错误,但我无法获得传入参数的内容,我放入正则表达式,它不断给出错误。

所以不确定“正则表达式”是什么,但您可以使用$request->get_param() 获取特定参数,或$request->get_params() 要获取请求中的所有参数(例如URL),请执行以下操作:

function notifications_cbt_func( $request ) {
    // Get specific parameters:
    $merchant_id = $request->get_param( \'merchant_id\' );
    $resource    = $request->get_param( \'resource\' );

    // Get all the parameters:
    $params = $request->get_params();

    //...
}
请注意,在上述示例中$request 变量是WP_REST_Request 实例,请检查该链接中的类方法、属性等。

您还应该检查REST API handbook. :)

更新以回应评论或编辑的问题,

在您的回拨中(notifications_cbt_func()), 没有必要json_encode() 因为WordPress REST API端点确实返回JSON编码的字符串,即JSON响应。

所以就这么做吧return $params; 或者任何需要归还的东西。

关于“但是我的路线GET和POST都返回null”—那是因为你$$params 其中(是null 和)应该是$params.

还有,没必要打电话register_rest_route() 同一路线多次(/cbt-api/v1/notifications 在您的情况下)。只需调用一次,第三个参数是端点数组:

register_rest_route( \'cbt-api/v1\', \'/notifications\', array(
    array(
        \'methods\'  => \'GET\',
        \'callback\' => \'notifications_cbt_func\',
    ),
    array(
        \'methods\'  => \'POST\',
        \'callback\' => \'notifications_cbt_func\',
    ),
) );
对于完全相同的回调(和参数),只需提供一个方法数组:

register_rest_route( \'cbt-api/v1\', \'/notifications\', array(
    \'methods\'  => array( \'GET\', \'POST\' ),
    \'callback\' => \'notifications_cbt_func\',
) );

相关推荐

如何在WordPress unctions.php中获取2个或多个自定义POST类型

我使用下面的代码为帖子获取修改后的数据,但我需要为其他自定义帖子获取相同的修改后的帖子。例如,如果我将post更改为test(我的自定义post类型名称)“if(\'post\'==get\\u post\\u type())”,它就可以工作,但我需要测试、post和电影等。function et_last_modified_date_blog( $the_date ) { if ( \'post\' === get_post_type() ) { $the_tim