对 Wordpress REST API 的 POST 请求返回一个空对象

Posted

技术标签:

【中文标题】对 Wordpress REST API 的 POST 请求返回一个空对象【英文标题】:POST request to Wordpress REST API returns an empty object 【发布时间】:2021-12-12 19:57:51 【问题描述】:

我正在一个插件内创建一个Gutenberg block,其中包含用于压缩文件的 MediaUpload。然后我尝试添加一个回调,该回调将使用 zip 文件的 id 来获取附件 url,如果还没有,则在单独的资产区域中创建一个新文件夹,然后将文件解压缩到文件夹中。

现在我正在尝试使用 wp.apiFetch 使用 REST 来执行此操作。

我已经测试了响应,但即使响应正确通过,对象也是空的。

这是Edit.js 文件:

wp.apiFetch(
  path: '/name-support/v1/zipped/',
  method: 'POST',
  data:  id: 'test test test' ,
).then(data => 
  console.log('response: ', data);
);

这是 REST API 路由设置和回调函数:

add_action( 'rest_api_init', function () 
  register_rest_route( 'name-support/v1', '/zipped/', 
      [
        'methods' => WP_REST_Server::EDITABLE,
        'callback' => 'name_image_sequence_unzip',
        'permission_callback' => '__return_true'
      ] 
  );
);

function name_image_sequence_unzip($data) 
    return rest_ensure_response( $data );

【问题讨论】:

【参考方案1】:

php 端的回调函数中,使用$_POST 变量而不是$data。您也可以使用wp_send_json_success 将数据作为json 对象而不是rest_ensure_response 返回。

所以你的代码应该是这样的:

add_action( 'rest_api_init', function () 
  register_rest_route( 'name-support/v1', '/zipped/', 
      [
        'methods' => WP_REST_Server::EDITABLE,
        'callback' => 'name_image_sequence_unzip',
        'permission_callback' => '__return_true'
      ] 
  );
);

function name_image_sequence_unzip( $_POST ) 
    return wp_send_json_success( $_POST );

当然,别忘了validatesanitize$_POST 收到的数据。

让我知道你是否可以让它工作!

【讨论】:

以上是关于对 Wordpress REST API 的 POST 请求返回一个空对象的主要内容,如果未能解决你的问题,请参考以下文章

javascript WordPress查询多种帖子类型(REST API),对REST API的请求 - 查询多个帖子类型并按ACF字段对数据排序

对 Wordpress REST API 的 POST 请求返回一个空对象

如何通过 Wordpress REST API 对 LearnDash 中受保护数据的远程访问进行身份验证?

WordPress REST API 未检索所有数据

将 WordPress Rest API 请求限制到我的域

Wordpress Rest API:返回 100 多个结果