namespace = 'user-id/v1'; $this->rest_base = 'inspect'; add_action( 'rest_api_init', array( $this, 'register_routes' ) ); } /** * Register the routes. */ public function register_routes() { register_rest_route( $this->namespace, '/' . $this->rest_base . '/(?P[\d]+)', array( array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_item' ), 'permission_callback' => array( $this, 'get_item_permissions_check' ), 'args' => array( 'id' => array( 'description' => __( 'Unique identifier for the user.', 'user-id' ), 'type' => 'integer', 'required' => true, ), ), ), ) ); } /** * Check permissions. * * @param WP_REST_Request $request Request object. * @return bool|WP_Error */ public function get_item_permissions_check( $request ) { if ( ! current_user_can( 'manage_options' ) ) { return new WP_Error( 'rest_forbidden', esc_html__( 'You do not have permission to inspect users.', 'user-id' ), array( 'status' => rest_authorization_required_code() ) ); } return true; } /** * Get one item. * * @param WP_REST_Request $request Request object. * @return WP_REST_Response|WP_Error */ public function get_item( $request ) { $user_id = (int) $request['id']; $user = get_userdata( $user_id ); if ( ! $user ) { return new WP_Error( 'rest_user_invalid_id', esc_html__( 'Invalid user ID.', 'user-id' ), array( 'status' => 404 ) ); } $roles = ! empty( $user->roles ) ? $user->roles : array(); $caps = ! empty( $user->allcaps ) ? array_keys( array_filter( $user->allcaps ) ) : array(); /** * Filter user_meta keys to be returned via API. */ $allowed_keys = apply_filters( 'user_id_rest_meta_keys', array() ); $all_meta = get_user_meta( $user->ID ); $filtered_meta = array(); if ( ! empty( $allowed_keys ) ) { foreach ( $allowed_keys as $key ) { if ( isset( $all_meta[ $key ] ) ) { $filtered_meta[ $key ] = maybe_unserialize( $all_meta[ $key ][0] ); } } } $data = array( 'id' => $user->ID, 'username' => $user->user_login, 'email' => $user->user_email, 'roles' => $roles, 'capabilities' => $caps, 'registered' => $user->user_registered, 'meta' => $filtered_meta, ); return rest_ensure_response( $data ); } } new User_ID_REST_API();