WC_AJAX::json_search_customers()
Search for customers and return json.
Description Description
Source Source
File: includes/class-wc-ajax.php
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 ) );
}