如何使用 WordPress Rest API v2 更新用户元数据

问题描述 投票:0回答:2

我正在使用 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"}]}
wordpress wordpress-rest-api
2个回答
2
投票

我能够通过注册我想要通过 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
});


0
投票

使用 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
    获取数据以返回自定义元数据以存储在用户中
© www.soinside.com 2019 - 2024. All rights reserved.