wp-api :如何更新用户元数据?

wp-api : How can I update user meta?

现在,我可以像这样检索用户(通过 Angularjs 和 angular-wp-api): [这里的一切都是用咖啡写的]

req=
  method: 'GET'
  url: wpAPIData.base + "/users/me"
  headers:
    'X-WP-Nonce': wpAPIData.nonce

$http(req).success($scope.getData)

我还可以用这个更新任何用户的简单属性:

req=
  method: 'POST'
  url: wpAPIData.base + "/users/1"
  headers:
    'X-WP-Nonce': wpAPIData.nonce
  data:
    lastname: 'new name'
$http(req).success($scope.checkData)

问题是,我在 wp api 文档中找不到任何更新用户元数据的方法: http://wp-api.org/

因此,据我所知,目前在 wp-api 上没有任何关于元数据的实现,您无法检索元数据,也无法使用基础 api 更改它们。但是,您可以扩展 api 来实现这些功能。

我对 api 的肮脏扩展基于此 post :
https://github.com/WP-API/WP-API/issues/331

如果您想对 api 进行适当的扩展,请按照他的步骤操作。一个简化的版本,并且 NOT MAINTAINABLE 是在 class-wp-json-users.php 中添加几行,位于 "wp-content/plugins/json-rest-api/libs/"。您必须在此文件中编辑两个函数:

  • 首先,将此添加到 prepare_user() 以检索真实的用户元数据:

    $user_fields['meta'] = array(
        'meta' => get_user_meta($user->ID), /* This is the added line */
        'links' => array(
            'self' => json_url( '/users/' . $user->ID ),
            'archives' => json_url( '/users/' . $user->ID . '/posts' ),
        ),
    );
    

    为你塞满了很多无用信息,无用信息任你整理。

  • 其次,将此添加到函数第一部分的 edit_user()(您也可以将类似的行添加到 create_user 如果您需要初始元数据):

    if(isset($data['metaupdate'])){
        foreach($data['metaupdate']as $k => $v){
            update_user_meta($user->ID,$k,$v);
        }
    }
    

此处 'metaupdate' 是您的 PUT 请求发送的数据中使用的密钥,它将标识为您要更新的元数据。您可以为此使用您喜欢的任何名称。此键是一个包含将传递给用户的每对键和值元数据的对象。

这真的很脏,我强烈建议您选择上述 link 实施,因为在此之后您将无法再更新 wp-api。