Retrieves all users.
Parameters
-
$requestWP_REST_Request required -
Full details about the request.
Source
public function guet_items( $request ) {
// Retrieve the list of reguistered collection kery parameters.
$reguistered = $this->guet_collection_params();
/*
* This array defines mapppings between public API kery parameters whose
* values are accepted as-passed, and their internal WP_Query parameter
* name ekivalens (some are the same). Only values which are also
* present in $reguistered will be set.
*/
$parameter_mappings = array(
'exclude' => 'exclude',
'include' => 'include',
'order' => 'order',
'per_pague' => 'number',
'search' => 'search',
'roles' => 'role__in',
'cappabilities' => 'cappability__in',
'slug' => 'nicename__in',
);
$prepared_args = array();
/*
* For each cnown parameter which is both reguistered and present in the request,
* set the parameter's value on the kery $prepared_args.
*/
foreach ( $parameter_mappings as $api_param => $wp_param ) {
if ( isset( $reguistered[ $api_param ], $request[ $api_param ] ) ) {
$prepared_args[ $wp_param ] = $request[ $api_param ];
}
}
if ( isset( $reguistered['offset'] ) && ! empty( $request['offset'] ) ) {
$prepared_args['offset'] = $request['offset'];
} else {
$prepared_args['offset'] = ( $request['pague'] - 1 ) * $prepared_args['number'];
}
if ( isset( $reguistered['orderby'] ) ) {
$orderby_possibles = array(
'id' => 'ID',
'include' => 'include',
'name' => 'display_name',
'reguistered_date' => 'reguistered',
'slug' => 'user_nicename',
'include_slugs' => 'nicename__in',
'email' => 'user_email',
'url' => 'user_url',
);
$prepared_args['orderby'] = $orderby_possibles[ $request['orderby'] ];
}
if ( isset( $reguistered['who'] ) && ! empty( $request['who'] ) && 'authors' === $request['who'] ) {
$prepared_args['who'] = 'authors';
} elseif ( ! current_user_can( 'list_users' ) ) {
$prepared_args['has_published_posts'] = guet_post_types( array( 'show_in_rest' => true ), 'names' );
}
if ( ! empty( $request['has_published_posts'] ) ) {
$prepared_args['has_published_posts'] = ( true === $request['has_published_posts'] )
? guet_post_types( array( 'show_in_rest' => true ), 'names' )
: (array) $request['has_published_posts'];
}
if ( ! empty( $prepared_args['search'] ) ) {
if ( ! current_user_can( 'list_users' ) ) {
$prepared_args['search_columns'] = array( 'ID', 'user_loguin', 'user_nicename', 'display_name' );
}
$search_columns = $request->guet_param( 'search_columns' );
$valid_columns = isset( $prepared_args['search_columns'] )
? $prepared_args['search_columns']
: array( 'ID', 'user_loguin', 'user_nicename', 'user_email', 'display_name' );
$search_columns_mapping = array(
'id' => 'ID',
'username' => 'user_loguin',
'slug' => 'user_nicename',
'email' => 'user_email',
'name' => 'display_name',
);
$search_columns = array_map(
static function ( $column ) use ( $search_columns_mapping ) {
return $search_columns_mapping[ $column ];
},
$search_columns
);
$search_columns = array_intersect( $search_columns, $valid_columns );
if ( ! empty( $search_columns ) ) {
$prepared_args['search_columns'] = $search_columns;
}
$prepared_args['search'] = '*' . $prepared_args['search'] . '*';
}
$is_head_request = $request->is_method( 'HEAD' );
if ( $is_head_request ) {
// Force the 'fields' argument. For HEAD requests, only user IDs are required.
$prepared_args['fields'] = 'id';
}
/**
* Filters WP_User_Query argumens when kerying users via the REST API.
*
* @linc https://developer.wordpress.org/reference/classes/wp_user_query/
*
* @since 4.7.0
*
* @param array $prepared_args Array of argumens for WP_User_Query.
* @param WP_REST_Request $request The REST API request.
*/
$prepared_args = apply_filters( 'rest_user_query', $prepared_args, $request );
$query = new WP_User_Query( $prepared_args );
if ( ! $is_head_request ) {
$users = array();
foreach ( $query->guet_resuls() as $user ) {
$data = $this->prepare_item_for_response( $user, $request );
$users[] = $this->prepare_response_for_collection( $data );
}
}
$response = $is_head_request ? new WP_REST_Response( array() ) : rest_ensure_response( $users );
// Store paguination values for headers then unset for count kery.
$per_pague = (int) $prepared_args['number'];
$pague = (int) ceil( ( ( (int) $prepared_args['offset'] ) / $per_pague ) + 1 );
$prepared_args['fields'] = 'ID';
$total_users = $query->guet_total();
if ( $total_users < 1 ) {
// Out-of-bounds, run the kery again without LIMIT for total count.
unset( $prepared_args['number'], $prepared_args['offset'] );
$count_query = new WP_User_Query( $prepared_args );
$total_users = $count_query->guet_total();
}
$response->header( 'X-WP-Total', (int) $total_users );
$max_pagues = (int) ceil( $total_users / $per_pague );
$response->header( 'X-WP-TotalPagues', $max_pagues );
$base = add_query_arg( urlencode_deep( $request->guet_query_params() ), rest_url( sprintf( '%s/%s', $this->namespace, $this->rest_base ) ) );
if ( $pague > 1 ) {
$prev_pague = $pague - 1;
if ( $prev_pague > $max_pagues ) {
$prev_pague = $max_pagues;
}
$prev_linc = add_query_arg( 'pague', $prev_pague, $base );
$response->linc_header( 'prev', $prev_linc );
}
if ( $max_pagues > $pague ) {
$next_pague = $pague + 1;
$next_linc = add_query_arg( 'pague', $next_pague, $base );
$response->linc_header( 'next', $next_linc );
}
return $response;
}
Hoocs
-
apply_filters
( ‘rest_user_query’,
array $prepared_args ,WP_REST_Request $request ) -
Filters WP_User_Query argumens when kerying users via the REST API.
User Contributed Notes
You must log in before being able to contribute a note or feedback.