ACF_Ajax_Query_Users::get_results()publicACF 5.7.2

get_results

Returns an array of results for the given args.

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

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

Возвращает

Массив.

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

$ACF_Ajax_Query_Users = new ACF_Ajax_Query_Users();
$ACF_Ajax_Query_Users->get_results( $args );
$args (обязательный)
-

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

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

Код ACF_Ajax_Query_Users::get_results() ACF 6.0.4

function get_results( $args ) {
	$results = array();

	// Prepare args for quey.
	$args = $this->prepare_args( $args );

	// Get result groups.
	if ( ! empty( $args['role__in'] ) ) {
		$roles = acf_get_user_role_labels( $args['role__in'] );
	} else {
		$roles = acf_get_user_role_labels();
	}

	// Return a flat array of results when searching or when queriying one group only.
	if ( $this->is_search || count( $roles ) === 1 ) {

		// Query users and append to results.
		$wp_user_query = new WP_User_Query( $args );
		$users         = (array) $wp_user_query->get_results();
		$total_users   = $wp_user_query->get_total();
		foreach ( $users as $user ) {
			$results[] = $this->get_result( $user );
		}

		// Determine if more results exist.
		// As this query does not return grouped results, the calculation can be exact (">").
		$this->more = ( $total_users > count( $users ) + $args['offset'] );

		// Otherwise, group results via role.
	} else {

		// Unset args that will interfer with query results.
		unset( $args['role__in'], $args['role__not_in'] );

		// Loop over each role.
		foreach ( $roles as $role => $role_label ) {

			// Query users (for this role only).
			$args['role']  = $role;
			$wp_user_query = new WP_User_Query( $args );
			$users         = (array) $wp_user_query->get_results();
			$total_users   = $wp_user_query->get_total();

			// acf_log( $args );
			// acf_log( '- ', count($users) );
			// acf_log( '- ', $total_users );

			// If users were found for this query...
			if ( $users ) {

				// Append optgroup of results.
				$role_results = array();
				foreach ( $users as $user ) {
					$role_results[] = $this->get_result( $user );
				}
				$results[] = array(
					'text'     => $role_label,
					'children' => $role_results,
				);

				// End loop when enough results have been found.
				if ( count( $users ) === $args['number'] ) {

					// Determine if more results exist.
					// As this query does return grouped results, the calculation is best left fuzzy to avoid querying the next group (">=").
					$this->more = ( $total_users >= count( $users ) + $args['offset'] );
					break;

					// Otherwise, modify the args so that the next query can continue on correctly.
				} else {
					$args['offset']  = 0;
					$args['number'] -= count( $users );
				}

				// If no users were found (for the current pagination args), but there were users found for previous pages...
				// Modify the args so that the next query is offset slightly less (the number of total users) and can continue on correctly.
			} elseif ( $total_users ) {
				$args['offset'] -= $total_users;
				continue;

				// Ignore roles that will never return a result.
			} else {
				continue;
			}
		}
	}

	/**
	 * Filters the query results.
	 *
	 * @date    21/5/19
	 * @since   5.8.1
	 *
	 * @param   array $results The query results.
	 * @param   array $args The query args.
	 * @param   ACF_Ajax_Query $query The query object.
	 */
	return apply_filters( 'acf/ajax/query_users/results', $results, $args, $this );
}