无法通过 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_meta
、update_user_meta
和 add_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 );
}
}
我正在开发一个通过 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_meta
、update_user_meta
和 add_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 );
}
}