WC_REST_Customers_V1_Controller::get_items()publicWC 1.0

Get all customers.

Метод класса: WC_REST_Customers_V1_Controller{}

Хуки из метода

Возвращает

WP_Error|WP_REST_Response.

Использование

$WC_REST_Customers_V1_Controller = new WC_REST_Customers_V1_Controller();
$WC_REST_Customers_V1_Controller->get_items( $request );
$request(WP_REST_Request) (обязательный)
Full details about the request.

Код WC_REST_Customers_V1_Controller::get_items() WC 9.3.3

public function get_items( $request ) {
	$prepared_args = array();
	$prepared_args['exclude'] = $request['exclude'];
	$prepared_args['include'] = $request['include'];
	$prepared_args['order']   = $request['order'];
	$prepared_args['number']  = $request['per_page'];
	if ( ! empty( $request['offset'] ) ) {
		$prepared_args['offset'] = $request['offset'];
	} else {
		$prepared_args['offset'] = ( $request['page'] - 1 ) * $prepared_args['number'];
	}
	$orderby_possibles = array(
		'id'              => 'ID',
		'include'         => 'include',
		'name'            => 'display_name',
		'registered_date' => 'registered',
	);
	$prepared_args['orderby'] = $orderby_possibles[ $request['orderby'] ];
	$prepared_args['search']  = $request['search'];

	if ( ! empty( $prepared_args['search'] ) ) {
		$prepared_args['search'] = '*' . $prepared_args['search'] . '*';
	}

	// Filter by email.
	if ( ! empty( $request['email'] ) ) {
		$prepared_args['search']         = $request['email'];
		$prepared_args['search_columns'] = array( 'user_email' );
	}

	// Filter by role.
	if ( 'all' !== $request['role'] ) {
		$prepared_args['role'] = $request['role'];
	}

	/**
	 * Filter arguments, before passing to WP_User_Query, when querying users via the REST API.
	 *
	 * @see https://developer.wordpress.org/reference/classes/wp_user_query/
	 *
	 * @param array           $prepared_args Array of arguments for WP_User_Query.
	 * @param WP_REST_Request $request       The current request.
	 */
	$prepared_args = apply_filters( 'woocommerce_rest_customer_query', $prepared_args, $request );

	$query = new WP_User_Query( $prepared_args );

	$users = array();
	foreach ( $query->results as $user ) {
		$data = $this->prepare_item_for_response( $user, $request );
		$users[] = $this->prepare_response_for_collection( $data );
	}

	$response = rest_ensure_response( $users );

	// Store pagination values for headers then unset for count query.
	$per_page = (int) $prepared_args['number'];
	$page = ceil( ( ( (int) $prepared_args['offset'] ) / $per_page ) + 1 );

	$prepared_args['fields'] = 'ID';

	$total_users = $query->get_total();
	if ( $total_users < 1 ) {
		// Out-of-bounds, run the query again without LIMIT for total count.
		unset( $prepared_args['number'] );
		unset( $prepared_args['offset'] );
		$count_query = new WP_User_Query( $prepared_args );
		$total_users = $count_query->get_total();
	}
	$response->header( 'X-WP-Total', (int) $total_users );
	$max_pages = ceil( $total_users / $per_page );
	$response->header( 'X-WP-TotalPages', (int) $max_pages );

	$base = add_query_arg( $request->get_query_params(), rest_url( sprintf( '/%s/%s', $this->namespace, $this->rest_base ) ) );
	if ( $page > 1 ) {
		$prev_page = $page - 1;
		if ( $prev_page > $max_pages ) {
			$prev_page = $max_pages;
		}
		$prev_link = add_query_arg( 'page', $prev_page, $base );
		$response->link_header( 'prev', $prev_link );
	}
	if ( $max_pages > $page ) {
		$next_page = $page + 1;
		$next_link = add_query_arg( 'page', $next_page, $base );
		$response->link_header( 'next', $next_link );
	}

	return $response;
}