You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 14:22:34