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

WordPress REST API中POST请求未触发update_callback问题排查

问题分析与修复方案

我看了你的代码,POST请求没触发update_user_acf_fields主要有几个关键原因,咱们一步步来解决:

1. 更新请求必须包含目标字段

WordPress的update_callback只有在你明确提交了grad字段的时候才会触发。也就是说,你POST到/wp-json/wp/v2/users/{user_id}时,请求体里必须包含"grad": "你的新值",比如:

{
  "grad": "2024届"
}

如果请求里没带这个字段,REST API只会处理其他默认字段,不会调用你的自定义更新回调。

2. update_callback的权限检查与返回值要求

你的update_user_acf_fields目前只是打日志,没有做权限验证,也没有返回正确的结果,这会导致WordPress无法正确识别回调的执行状态。你需要:

  • 检查当前用户是否有权限更新目标用户
  • 实际调用ACF的更新函数
  • 返回更新后的值或者WP_Error(如果失败)

3. 硬编码用户ID的问题(虽不影响回调触发,但属于bug)

get_user_acf_fields里你写死了user_32,这会导致所有用户请求都返回用户32的grad值,应该换成当前请求的用户ID:'user_' . $object['id']。

修复后的完整代码

add_action( 'rest_api_init', 'rest_api_user_meta_fields' );
function rest_api_user_meta_fields() {
    register_rest_field( 'user', 'grad', array(
        'get_callback'    => 'get_user_acf_fields',
        'update_callback' => 'update_user_acf_fields',
        'schema'          => null,
    ) );
}

function get_user_acf_fields( $object ) {
    // 使用当前请求的用户ID,而非硬编码32
    $grad = get_field('grad', 'user_' . $object['id']);
    error_log('GET: 当前用户ID ' . $object['id'] . ' 的grad值: ' . $grad);
    return $grad;
}

function update_user_acf_fields( $value, $object, $field_name ) {
    // 检查当前用户是否有权限更新目标用户
    if ( ! current_user_can( 'edit_user', $object->ID ) ) {
        return new WP_Error(
            'rest_forbidden',
            __( '你没有权限更新该用户的字段。' ),
            array( 'status' => rest_authorization_required_code() )
        );
    }

    // 实际更新ACF字段
    $updated = update_field( $field_name, $value, 'user_' . $object->ID );
    
    if ( $updated ) {
        error_log('POST: 用户ID ' . $object->ID . ' 的grad字段已更新为: ' . $value);
        return $value; // 返回更新后的值,REST API会把这个值返回给客户端
    } else {
        return new WP_Error(
            'rest_update_failed',
            __( '字段更新失败。' ),
            array( 'status' => 500 )
        );
    }
}

测试注意事项

  • 确保你使用的用户账号拥有edit_users权限(或至少能编辑目标用户)
  • POST请求的Content-Type要设置为application/json
  • 请求体里必须包含grad字段,否则不会触发更新回调

内容的提问来源于stack exchange,提问作者errorous

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:49:28