无法通过 Wordpress REST 更新自定义用户元 API

Can't update custom user meta through Wordpress REST API

我正在开发一个通过 Wordpress REST API 获取和更新内容的网站。每当用户单击 "Bookmark this" 按钮时,我都会尝试更新用户的书签,因此我创建了以下 register_rest_field 函数:

function handle_user_bookmarks() {
    register_rest_field( 'user', 'bookmarks', array(
        'get_callback' => array( $this, 'get_user_bookmarks' ),
        'update_callback' => array( $this, 'add_user_bookmarks' ),
        'schema' => null
    ));        
}   

function get_user_bookmarks( $user, $field_name, $request ) { 
    return get_user_meta( $user[ 'id' ], $field_name, true );
}

function add_user_bookmarks( $user, $meta_value ) { 
    $bookmarks = get_user_meta( $user[ 'id' ], 'bookmarks', false );
    if( $bookmarks ) {
        update_user_meta( $user[ 'id' ], 'bookmarks', $meta_value );
    } else {
        add_user_meta( $user[ 'id' ], 'bookmarks', $meta_value, true );
    }
} 

get_user_bookmarks 回调工作正常;相反,只有当我将 $user[ 'id' ] 替换为 get_user_metaupdate_user_metaadd_user_meta 中的 "static" ID 时,add_user_bookmarks 回调才有效。换句话说,如果编码如下:

function add_user_bookmarks( $user, $meta_value ) {
    $bookmarks = get_user_meta( 1, 'bookmarks', false );
    if( $bookmarks ) {
        update_user_meta( 1, 'bookmarks', $meta_value );
    } else {
        add_user_meta( 1, 'bookmarks', $meta_value, true );
    }
}

问题显然出在用户 ID 上,那么如何在 add_user_bookmarks 回调中检索它?

这是单击按钮时发出的 HTTP 请求,如果这对您有所帮助:

http://example.com/wp-json/wp/v2/users/1   (1 is the queried user's ID)

找到了。我将 $user['id'] 替换为 $user->ID(仅在 add_user_bookmarks 中)并且成功了。所以工作代码是:

function handle_user_bookmarks() {
    register_rest_field( 'user', 'bookmarks', array(
        'get_callback' => array( $this, 'get_user_bookmarks' ),
        'update_callback' => array( $this, 'add_user_bookmarks' ),
        'schema' => null
    ));        
}   

function get_user_bookmarks( $user, $field_name, $request ) { 
    return get_user_meta( $user[ 'id' ], $field_name, true );
}

function add_user_bookmarks( $user, $meta_value ) { 
    $bookmarks = get_user_meta( $user->ID, 'bookmarks', false );
    if( $bookmarks ) {
        update_user_meta( $user->ID, 'bookmarks', $meta_value );
    } else {
        add_user_meta( $user->ID, 'bookmarks', $meta_value, true );
    }
}