register( 'users_list', array( 'description' => 'List WordPress users.', 'domain' => 'core', 'capability' => 'list_users', 'inputSchema' => array( 'type' => 'object', 'properties' => array( 'role' => array( 'type' => 'string' ), 'search' => array( 'type' => 'string' ), 'per_page' => array( 'type' => 'integer', 'default' => 20 ), 'page' => array( 'type' => 'integer', 'default' => 1 ), ), ), ), function ( $args ) { $query = new WP_User_Query( array( 'role' => isset( $args['role'] ) ? sanitize_key( $args['role'] ) : '', 'search' => isset( $args['search'] ) ? '*' . sanitize_text_field( $args['search'] ) . '*' : '', 'number' => isset( $args['per_page'] ) ? min( 100, absint( $args['per_page'] ) ) : 20, 'paged' => isset( $args['page'] ) ? max( 1, absint( $args['page'] ) ) : 1, ) ); $items = array(); foreach ( $query->get_results() as $user ) { $items[] = agentdesk_format_user( $user ); } return array( 'users' => $items, 'total' => (int) $query->get_total() ); } ); $registry->register( 'users_get', array( 'description' => 'Get a user by ID.', 'domain' => 'core', 'capability' => 'list_users', 'inputSchema' => array( 'type' => 'object', 'properties' => array( 'id' => array( 'type' => 'integer' ) ), 'required' => array( 'id' ), ), ), function ( $args ) { $user = get_user_by( 'id', absint( $args['id'] ) ); if ( ! $user ) { return new WP_Error( 'agentdesk_not_found', 'User not found' ); } return agentdesk_format_user( $user, true ); } ); } ); /** * Format user. * * @param WP_User $user User. * @param bool $full Full details. * @return array */ function agentdesk_format_user( $user, $full = false ) { $data = array( 'id' => $user->ID, 'username' => $user->user_login, 'email' => $user->user_email, 'display_name' => $user->display_name, 'roles' => $user->roles, ); if ( $full ) { $data['registered'] = $user->user_registered; } return $data; }