Comment puis-je rechercher un utilisateur worpress par nom d'affichage ou une partie de celui-ci?

13

Je dois créer une page de recherche qui affichera tout ce qui concerne la recherche fournie. à- dire commentscontenant, events, posts, CPTs et usersavec ce nom.

Comment puis-je rechercher des utilisateurs sur le site dont le prénom ou le nom contient l'expression de recherche?

hannit cohen
la source

Réponses:

24

Recherche dans la table principale

Utilisez simplement WP_User_Queryavec un argument de recherche.

Donc, si vous souhaitez rechercher par exemple un utilisateur avec un mot-clé dans sa user_emailou des colonnes similaires du {$wpdb->prefix}userstableau, 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 searchchaîne a des caractéristiques "magiques": La valeur par search_columnsdéfaut est ...

  • user_emailsi @est présent dans l' searchargument.
  • user_loginet IDsi l' searchargument est numérique
  • user_urlsi la searchchaîne contient http://ouhttps://
  • ou ... user_loginet user_nicenamesi 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_nameou last_name, vous devrez faire un meta_querycar 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 relationclé. 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();
kaiser
la source
Dans quel fichier je veux ajouter cette requête?
Naveen
@Naveen Le meilleur ajustement serait soit le 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.
kaiser
Merci Kiaser pour votre réponse. s'il vous plaît aidez-moi comment puis-je intégrer ce code à functions.php
Naveen
3
@Naveen C'est hors de portée ici. Vous devrez en apprendre un peu plus sur le code ou trouver un développeur pour le faire pour vous. Et lire que Q / A .
kaiser
display_nameest une colonne wp_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 dans search_columnsau lieu de la méta-requête?
henrywright