1

我是 Wordpress 和 REST-API 的新手,我已经能够让 GET 函数工作,但我无法将参数传递给 post 函数。
下面我粘贴了我的代码。输入http://localhost/wp-json/localhost/v1/activeitem时会产生活动 ID,但如果我提供http://localhost/wp-json/localhost/v1/activeitem/123我会得到 {"code" :"rest_no_route","message":"没有找到匹配 URL 和请求方法的路由","data":{"status":404}}。
在 Wordpress 的 REST API 控制台中运行 /localhost/v1/activeitem?45 时,我得到“完成”。所以在这一点上,我想知道我做错了什么。
的想法是 xxx/activeitem 调用将提供活动 ID,而 xxx/activeitem[parameter] 会将活动项目更新为提供的 ID。

function LocalHost_GetActiveItem() {
    global $wpdb;
    $querystr = "select option_value as pid from wp_options where option_name = 'acelive_active';";
    $activeitem = $wpdb->get_results($querystr);
    return $activeitem[0];
}

function LocalHost_SetActiveItem($id) {

    //return $id;
    return "done";
}

add_action( 'rest_api_init', function () {
    register_rest_route( 'localhost/v1', '/activeitem/', array(
        array(
            'methods' => 'GET',
            'callback' => 'LocalHost_GetActiveItem',
        ),
        array(
            'methods' => 'POST',
            'callback' => 'LocalHost_SetActiveItem',
            'args' => array('id' => 234)
        ),
    ) );
} );

add_action( 'rest_api_init', function () {
    register_rest_route( 'localhost/v1', '/lastupdate/', array(
        'methods' => 'GET',
        'callback' => 'LocalHost_LastUpdate',
    ) );
} );
4

1 回答 1

1

确保您的正则表达式没问题。对于 id,您可以activeitem/(?P<id>[\d]+)在 register_rest_route() 的 $route 参数中使用,如果要更新 id,请确保将 register_rest_route() 的 $override 参数设置为 true

register_rest_route( 'localhost/v1', '/activeitem/(?P<id>[\d]+)', array(
          'methods' => 'POST',
        'callback' => 'LocalHost_SetActiveItem',
        'args' => array('id' => 234)

), true );

提供 xxx/activeitem/123 时出现 404 错误的原因是没有捕获 123 并将其作为 id 传递到您的 url,因为未提供正确的正则表达式。

于 2020-01-17T01:33:39.873 回答