WC_API_Customers::query_customers()privateWC 2.3

Helper method to get customer user objects

Note that WP_User_Query does not have built-in pagination so limit & offset are used to provide limited pagination support

The filter for role can only be a single role in a string.

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

Хуков нет.

Возвращает

WP_User_Query.

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

// private - только в коде основоного (родительского) класса
$result = $this->query_customers( $args );
$args(массив)
request arguments for filtering query
По умолчанию: array()

Список изменений

С версии 2.3 Введена.

Код WC_API_Customers::query_customers() WC 8.7.0

private function query_customers( $args = array() ) {

	// default users per page
	$users_per_page = get_option( 'posts_per_page' );

	// Set base query arguments
	$query_args = array(
		'fields'  => 'ID',
		'role'    => 'customer',
		'orderby' => 'registered',
		'number'  => $users_per_page,
	);

	// Custom Role
	if ( ! empty( $args['role'] ) ) {
		$query_args['role'] = $args['role'];

		// Show users on all roles
		if ( 'all' === $query_args['role'] ) {
			unset( $query_args['role'] );
		}
	}

	// Search
	if ( ! empty( $args['q'] ) ) {
		$query_args['search'] = $args['q'];
	}

	// Limit number of users returned
	if ( ! empty( $args['limit'] ) ) {
		if ( -1 == $args['limit'] ) {
			unset( $query_args['number'] );
		} else {
			$query_args['number'] = absint( $args['limit'] );
			$users_per_page       = absint( $args['limit'] );
		}
	} else {
		$args['limit'] = $query_args['number'];
	}

	// Page
	$page = ( isset( $args['page'] ) ) ? absint( $args['page'] ) : 1;

	// Offset
	if ( ! empty( $args['offset'] ) ) {
		$query_args['offset'] = absint( $args['offset'] );
	} else {
		$query_args['offset'] = $users_per_page * ( $page - 1 );
	}

	// Created date
	if ( ! empty( $args['created_at_min'] ) ) {
		$this->created_at_min = $this->server->parse_datetime( $args['created_at_min'] );
	}

	if ( ! empty( $args['created_at_max'] ) ) {
		$this->created_at_max = $this->server->parse_datetime( $args['created_at_max'] );
	}

	// Order (ASC or DESC, ASC by default)
	if ( ! empty( $args['order'] ) ) {
		$query_args['order'] = $args['order'];
	}

	// Order by
	if ( ! empty( $args['orderby'] ) ) {
		$query_args['orderby'] = $args['orderby'];

		// Allow sorting by meta value
		if ( ! empty( $args['orderby_meta_key'] ) ) {
			$query_args['meta_key'] = $args['orderby_meta_key'];
		}
	}

	$query = new WP_User_Query( $query_args );

	// Helper members for pagination headers
	$query->total_pages = ( -1 == $args['limit'] ) ? 1 : ceil( $query->get_total() / $users_per_page );
	$query->page = $page;

	return $query;
}