我如何获得WordPress' REST API包含用户元数据?

时间:2017-06-22 09:17:14

标签: wordpress rest

我已经设置了一个WordPress网站并添加了几个用户。当我直接查看数据库中的wp_usermeta表时,那里有几条记录,因此用户也有一些元数据。

根据the documentation,在请求用户时应包含meta,但在我请求/wp-json/wp/v2/users时,所有meta字段都是空数组。

我错过了什么?如何通过REST API获取有关用户的元数据?

2 个答案:

答案 0 :(得分:3)

根据this part of the docs,我设法找到了一种更简单的方法来实现这一目标。

不确定放置此代码的最佳做法。由于我已经有一个与API相关的插件,我只是在那里添加了代码。

// legend:    <type>, <meta_key>, <config>
register_meta('user', 'nickname', array(
  "type" => "string",
  "show_in_rest" => true // this is the key part
));

现在我只需要找出我需要的具体密钥:)

答案 1 :(得分:1)

这不是我的,成立于: https://wordpress.stackexchange.com/questions/270154/getting-user-meta-data-from-wp-rest-api

写在这里以供将来参考StackOverflow:

查看 register_rest_field()以使用其余的api注册meta。

   add_action( 'rest_api_init', 'adding_user_meta_rest' );

    function adding_user_meta_rest() {
       register_rest_field( 'user',
                            'collapsed_widgets',
                             array(
                               'get_callback'      => 'user_meta_callback',
                               'update_callback'   => null,
                               'schema'            => null,
                                )
                          );
    }

然后将 get_user_meta 位置于回调中。

function user_meta_callback( $user, $field_name, $request) {
       return get_user_meta( $user[ 'id' ], $field_name, true );
   }

WP_REST_Meta_Fields 类也可以提供更有用的见解。

更新:注册自定义路线

快速而肮脏的部分示例。坐在我面前的一些东西拼凑而成,但这不是一个有效的例子。

在阅读文档时可能会有所帮助。按照第一个 register_rest_route 之间的连接,它是GET方法的回调, my_get_callback ,以及回调方法使用 WP_Rest_Request类。它应该有助于绘制步骤的连接。我在评论中提到的文档将进入其他args,params等,当然还有 permissions_callback

希望它有所帮助。

   class My_Extend_Rest extends WP_REST_Controller {
            public function __construct() {
                add_action( 'rest_api_init', array( $this, 'register_routes' ) );
            }//end __construct

            public function register_routes() {
                $version = '1';
                $namespace = 'my-fancy-namespace/v' . $version; 
                $base = 'my-route-base';

    // so, site.com/wp-json/my-fancy-namespace/v2/my-route-base/

                register_rest_route( $namespace, '/'. $base, array(
                    array(
                        'methods'  => 'GET',
                        'callback' => array( $this, 'my_get_callback' ),
                        'permission_callback' => array( $this, 'key_permissions_check' ),
                        ),
                    array(
                        'methods'  => 'POST',
                        'callback' => array( $this, 'my_post_callback' ),
                        'permission_callback' => array( $this, 'key_permissions_check' ),
                        ),)
                );

                $base2 = 'my-second-base';
    // so, site.com/wp-json/my-fancy-namespace/v2/my-second-base/

                register_rest_route( $namespace, '/'. $base2, array(
                    array(
                        'methods'  => 'GET',
                        'callback' => array( $this, 'my_get_callback_two' ),
                        'permission_callback' => array( $this, 'key_permissions_check' ),
                        ),
                    array(
                        'methods'  => 'POST',
                        'callback' => array( $this, 'my_post_callback_two' ),
                        'permission_callback' => array( $this, 'key_permissions_check' ),
                        ),)
                );

        }//register_routes

       public function key_permissions_check() {
          //do permissions check stuff
       }

       public function my_get_callback( WP_REST_Request $request ) {

            //do stuff with $request 
           //see the methods mentioned in the comment




        }//end 
}//end class