Recherche dans la table principale
Utilisez simplement WP_User_Query
avec un argument de recherche.
Donc, si vous souhaitez rechercher par exemple un utilisateur avec un mot-clé dans sa user_email
ou des colonnes similaires du {$wpdb->prefix}users
tableau, vous pouvez effectuer les opérations suivantes:
$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();
Gardez à l'esprit qu'il *
s'agit d'un caractère générique. Donc , limitant par exemple user_email
à un seul domaine vous donnerait la chaîne de recherche suivante: *@example.com
.
La search
chaîne a des caractéristiques "magiques": La valeur par search_columns
défaut est ...
user_email
si @
est présent dans l' search
argument.
user_login
et ID
si l' search
argument est numérique
user_url
si la search
chaîne contient http://
ouhttps://
- ou ...
user_login
et user_nicename
si une chaîne est présente.
Tous ces paramètres par défaut ne sont définis que si aucun search_columns
argument n'a été spécifié.
Recherche dans la méta-table
Si vous souhaitez rechercher par exemple first_name
ou last_name
, vous devrez faire un meta_query
car ils ne font pas partie du tableau principal:
$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();
Assurez-vous de récupérer la bonne chaîne de recherche. Normalement, ce serait le cas get_query_var('s');
, mais cela pourrait - en fonction de votre formulaire name/id
également être quelque chose de différent que vous pourriez vouloir récupérer en utilisant $_GET['user_search']
par exemple. Assurez-vous de bien le supprimer et de supprimer les espaces blancs indésirables du début et de la fin de la chaîne.
Gardez à l'esprit que c'est array( array() )
la relation
clé. Si vous souhaitez simplement rechercher une seule clé, il peut être plus simple de procéder comme suit:
$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();
Requête finale
Le résultat peut ressembler à ce qui suit:
$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();
functions.php
, votre modèle ou (ce qui serait le mieux) bien emballé dans un mini-plugin personnalisé pour ne pas perdre de fonctionnalité lors du changement de thème.display_name
est une colonnewp_users
. Deux questions me viennent à l'esprit. 1: S'agit-il d'une modification récente du schéma de la base de données? 2: Peut-il être utilisé comme valeur danssearch_columns
au lieu de la méta-requête?Cela m'a aidé au lieu de la réponse de Kaiser: https://laubsterboy.com/blog/2015/07/search-wordpress-users-by-name/
Mais dans cette
$wpdb->escape($usermeta_keys)
fonction , la fonction a généré une erreur, j'ai donc simplement utilisé$usermeta_keys
.la source