我正在使用 WordPress 4.8 并尝试使用内置的 Rest api 更新用户元字段。我可以更新用户的其他字段,但不能更新用户的元字段。我尝试将以下 json 正文发布到服务器,但我根本没有得到任何更新。希望任何人都可以向我展示一些如何执行发布请求来更新用户元字段的示例。
URL : http://example.com/wp-json/wp/v2/users/100
method : POST
content-type: application/json
body : {"meta":{"meta_key":"meta_value"}} or {"meta": {"key":"meta_key","value":"meta_value"}} or {"meta":[{"meta_key":"meta_value"}]} or {"meta":[{"key":"meta_key","value":"meta_value"}]}
我能够通过注册我想要通过 API 更新的元值来解决这个问题:
register_meta('user', 'my_meta_value_name', [
'type' => 'string',
'single' => true,
'show_in_rest' => true,
]);
然后使用 JavaScript 我们可以像这样更新它:
var currentUserId = 1;
var apiUrl = '/wp-json/wp/v2/users/' + currentUserId;
var data = {
'id': currentUserId,
'meta': {
'my_meta_value_name': 'new value'
}
};
$.ajax({
method: 'POST',
url: apiUrl,
headers: {'X-WP-Nonce': 'nonce_value_here'},
data: data
})
.success(function (data) {
// do stuff
})
.fail(function (data) {
// do stuff
});
使用 Wordpress
Version 6.4.3
我必须执行以下操作:
$userMetaProp = 'customMeta';
add_filter('rest_pre_insert_user', static function (
stdClass $prepared_user,
WP_REST_Request $request
) use ($userMetaProp): stdClass {
if (!empty($request['meta'])) {
$prepared_user->{$userMetaProp} = [];
foreach ($request['meta'] as $key => $value) {
$prepared_user->{$userMetaProp}[$key] = $value;
}
}
return $prepared_user;
}, accepted_args: 2);
add_filter('insert_custom_user_meta', static function (
array $custom_meta,
WP_User $user,
bool $update,
array $userdata
) use ($userMetaProp): array {
if (array_key_exists($userMetaProp, $userdata)) {
foreach ($userdata[$userMetaProp] as $key => $value) {
$custom_meta[$key] = $value;
}
}
return $custom_meta;
}, accepted_args: 4);
现在您可以使用如下请求更新用户元数据:
curl --location --request POST 'http://localhost/wp-json/wp/v2/users/1' \
--header 'Authorization: Basic [AUTH-TOKEN]' \
--header 'Content-Type: application/json' \
--data-raw '{
"meta": {
"option":"theValueForTheOption"
}
}'
您需要使用自己的令牌更改[AUTH-TOKEN](请参阅:https://make.wordpress.org/core/2020/11/05/application-passwords-integration-guide/)
rest_pre_insert_user
获取请求的meta prop中的数据并将其存储在$prepared_user
insert_custom_user_meta
使用$userdata
中的数据,从$prepared_user
获取数据以返回自定义元数据以存储在用户中