WordPress REST API POST请求下PHP函数无法读取JSON体变量
WordPress REST API 参数获取问题修复方案
核心问题分析
- 错误使用参数获取方法:
get_json_params()返回的是完整JSON请求体数组,不是单个ID值,直接传给wp_set_object_terms会因参数类型不匹配失效。 - 冗余return语句:函数里两个
return,第二个永远不会执行,导致无法看到$userID的输出。 - 未兼容URL查询参数:URL拼接
?ID=3时,得用get_param()方法获取,而非get_json_params()。 - 缺少参数验证:没检查ID是否存在、是否为有效整数,导致无报错但逻辑不执行。
修正后的函数代码
function update_user_status_to_pending_from_api(WP_REST_Request $request) { // 同时兼容JSON请求体和URL查询参数获取ID $userID = $request->get_param('ID'); // 参数校验:确保ID存在且是有效整数 if (empty($userID) || !is_numeric($userID)) { return new WP_REST_Response( array('error' => '无效的用户ID参数'), 400 ); } $userID = intval($userID); // 更新用户状态分类 $result = wp_set_object_terms($userID, array('pending'), 'user_status', false); // 检查更新操作是否成功 if (is_wp_error($result)) { return new WP_REST_Response( array('error' => $result->get_error_message()), 500 ); } clean_object_term_cache($userID, 'user_status'); // 返回成功响应 return new WP_REST_Response( array( 'success' => true, 'user_id' => $userID, 'status' => 'pending' ), 200 ); }
正确请求方式
方式1:POST JSON请求体
请求头必须包含Content-Type: application/json,请求体内容示例:
{ "ID": 3 }
方式2:GET请求(URL带参数)
请求URL示例:https://你的站点域名/wp-json/你的自定义命名空间/v1/update-user-status?ID=3
调试小技巧
- 开启调试模式后,可在函数里加日志记录:
error_log('获取到的用户ID: ' . $userID);,然后去wp-content/debug.log里查看参数是否正确获取。 - 用curl测试的示例命令:
curl -X POST https://你的站点域名/wp-json/你的自定义命名空间/v1/update-user-status \ -H "Content-Type: application/json" \ -d '{"ID":3}'
内容的提问来源于stack exchange,提问作者Ian
相关产品推荐
相关产品推荐

