WC_AJAX::json_search_customers()public staticWC 1.0

Search for customers and return json.

Method of the class: WC_AJAX{}

Return

null. Nothing (null).

Usage

$result = WC_AJAX::json_search_customers();

WC_AJAX::json_search_customers() code WC 8.6.1

public static function json_search_customers() {
	ob_start();

	check_ajax_referer( 'search-customers', 'security' );

	if ( ! current_user_can( 'edit_shop_orders' ) ) {
		wp_die( -1 );
	}

	$term  = isset( $_GET['term'] ) ? (string) wc_clean( wp_unslash( $_GET['term'] ) ) : '';
	$limit = 0;

	if ( empty( $term ) ) {
		wp_die();
	}

	$ids = array();
	// Search by ID.
	if ( is_numeric( $term ) ) {
		$customer = new WC_Customer( intval( $term ) );

		// Customer does not exists.
		if ( 0 !== $customer->get_id() ) {
			$ids = array( $customer->get_id() );
		}
	}

	// Usernames can be numeric so we first check that no users was found by ID before searching for numeric username, this prevents performance issues with ID lookups.
	if ( empty( $ids ) ) {
		$data_store = WC_Data_Store::load( 'customer' );

		// If search is smaller than 3 characters, limit result set to avoid
		// too many rows being returned.
		if ( 3 > strlen( $term ) ) {
			$limit = 20;
		}
		$ids = $data_store->search_customers( $term, $limit );
	}

	$found_customers = array();

	if ( ! empty( $_GET['exclude'] ) ) {
		$ids = array_diff( $ids, array_map( 'absint', (array) wp_unslash( $_GET['exclude'] ) ) );
	}

	foreach ( $ids as $id ) {
		$customer = new WC_Customer( $id );
		/* translators: 1: user display name 2: user ID 3: user email */
		$found_customers[ $id ] = sprintf(
			/* translators: $1: customer name, $2 customer id, $3: customer email */
			esc_html__( '%1$s (#%2$s – %3$s)', 'woocommerce' ),
			$customer->get_first_name() . ' ' . $customer->get_last_name(),
			$customer->get_id(),
			$customer->get_email()
		);
	}

	wp_send_json( apply_filters( 'woocommerce_json_search_found_customers', $found_customers ) );
}