Ricerca nella tabella principale
Basta usare WP_User_Query
con un argomento di ricerca.
Quindi, se vuoi cercare un utente con una parola chiave nelle sue user_email
colonne o simili dalla {$wpdb->prefix}users
tabella, puoi fare quanto segue:
$users = new WP_User_Query( array(
'search' => '*'.esc_attr( $your_search_string ).'*',
'search_columns' => array(
'user_login',
'user_nicename',
'user_email',
'user_url',
),
) );
$users_found = $users->get_results();
Tieni presente che *
è un carattere jolly. Così, limitando ad esempio, la user_email
a un singolo dominio darebbe la seguente stringa di ricerca: *@example.com
.
La search
stringa ha alcune caratteristiche "magiche": l' search_columns
impostazione predefinita è ...
user_email
se @
è presente search
nell'arg.
user_login
e ID
se l' search
arg è numerico
user_url
se la search
stringa contiene http://
ohttps://
- oppure ...
user_login
e user_nicename
se è presente una stringa.
Tutti questi valori predefiniti vengono impostati solo se non è search_columns
stato specificato alcun argomento.
Ricerca nella tabella meta
Se vuoi cercare per esempio first_name
o last_name
, allora dovrai fare un meta_query
dato che non fanno parte della tabella principale:
$search_string = esc_attr( trim( get_query_var('s') ) );
$users = new WP_User_Query( array(
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'first_name',
'value' => $search_string,
'compare' => 'LIKE'
),
array(
'key' => 'last_name',
'value' => $search_string,
'compare' => 'LIKE'
)
)
) );
$users_found = $users->get_results();
Assicurati di recuperare la stringa di ricerca corretta. Normalmente sarebbe get_query_var('s');
, ma potrebbe - a seconda del tuo modulo name/id
essere anche qualcosa di diverso che potresti voler recuperare usando $_GET['user_search']
ad esempio. Assicurati di farlo correttamente e rimuovere lo spazio bianco indesiderato dall'inizio e dalla fine della stringa.
Tieni presente che questo è un in array( array() )
quanto c'è la relation
chiave. Se si desidera solo cercare una chiave singola, potrebbe essere più semplice eseguire le seguenti operazioni:
$search_string = esc_attr( trim( get_query_var('s') ) );
$users = new WP_User_Query( array(
'meta_key' => 'first_name',
'meta_value' => $search_string,
'meta_compare' => 'LIKE',
) );
$users_found = $users->get_results();
Query finale
Il risultato potrebbe essere simile al seguente:
$search_string = esc_attr( trim( get_query_var('s') ) );
$users = new WP_User_Query( array(
'search' => "*{$search_string}*",
'search_columns' => array(
'user_login',
'user_nicename',
'user_email',
'user_url',
),
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'first_name',
'value' => $search_string,
'compare' => 'LIKE'
),
array(
'key' => 'last_name',
'value' => $search_string,
'compare' => 'LIKE'
)
)
) );
$users_found = $users->get_results();