开发Gutenberg块调用WordPress REST API POST返回空对象问题
问题原因
- 自定义REST接口回调中拿到的
$data参数是WP_REST_Request类的实例,不是前端传递的参数本身。WordPress序列化响应数据时会过滤该实例的非公开属性,直接返回该对象就会导致前端拿到空内容。 - 代码没有从请求实例中提取实际传递的参数内容,直接将请求实例作为响应返回。
修复方案
1. 调整PHP端回调函数
修改回调逻辑,先从请求实例中提取参数再返回,示例代码如下:
function name_image_sequence_unzip( WP_REST_Request $request ) { // 提取所有请求参数 $params = $request->get_params(); // 也可单独提取指定参数:$zip_id = $request->get_param( 'id' ); // 后续实现获取附件URL、创建目录、解压zip的逻辑都基于提取的参数处理 return rest_ensure_response( $params ); }
修改后前端即可正常拿到{id: 'test test test'}的返回内容。
2. 可选优化:增加参数校验(推荐)
注册路由时补充参数校验规则,避免非法请求,正式环境也建议修改权限校验逻辑,不要直接用__return_true:
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' => function() { return current_user_can( 'upload_files' ); }, 'args' => [ 'id' => [ 'required' => true, 'validate_callback' => function( $param ) { return is_numeric( $param ) || is_string( $param ); } ] ] ] ); });
内容的提问来源于stack exchange,提问作者Marin Carroll
相关产品推荐
相关产品推荐

