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

时间:2018-04-03 08:01:11

标签: wordpress wordpress-rest-api

我正在开发一个通过Wordpress REST API获取和更新内容的网站。我试图在用户点击“#34;书签”时更新用户的书签。按钮,所以我创建了以下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回调正常;相反,add_user_bookmarks回调只有在我用"静态"替换$user[ 'id' ]时才有效。 get_user_metaupdate_user_metaadd_user_meta中的ID。换句话说,如果编码如下:

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)

1 个答案:

答案 0 :(得分:3)

找到它。我将$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 );
    }
}