WordPress comment filtrer vos utilisateurs avec la Class WP_User_Query

La Class WP_User_Query est disponible depuis la version 3.1 de WordPress, elle permet d’interroger la base de données pour récupérer des informations sur les utilisateurs, et de pouvoir sortir une liste sur certain critère de leurs profils.


La première étape est de créer un tableau d’arguments ou on va définir nos critères de recherche :


– Le rôle.

– L’ordre des résultats.

– Le nom des champs a traité dans le profil.

– Les valeurs des champs dans le profil.

– La méthode de comparaison.


Ci-dessous dans l’exemple je voudrais faire une recherche de mes utilisateurs qui on pour rôle ‘Auteur (Author)’ de sexe féminin et par département pour préparé une campagne emailing ciblée.


J’ajoute le role ‘Author’ Je récupère le nom des champs dans la page profile de mes utilisateurs : departement et sexe que je vais ajouter a l’argument key ,ensuite je vais définir la valeur de ces deux champs : féminin pour le sexe et Paris pour le département.


Après avoir défini mes critères de rechercher d’utilisateur, il faut que j’indique une méthode de comparaison je vais prendre ‘=’ qui est la valeur par défaut et qui me convient aussi.


Différentes valeurs de comparaison possible

compare valeur possible ‘=’, ‘!=’, ‘>’, ‘>=’, ‘<‘, ‘<=’, ‘LIKE’, ‘NOT LIKE’, ‘IN’, ‘NOT IN’, ‘BETWEEN’, ‘NOT BETWEEN’, ‘EXISTS’, and ‘NOT EXISTS’. Valeur par défaut ‘=’.


La valeur ‘=’ me permet d’avoir une liste des utilisateurs qui ont bien complété leurs champs et si le champ est vide l’utilisateur n’apparaitra pas dans cette liste. En général pour se type de champ on utilise l’élément HTML select pour être sur d’avoir une valeur.


// Préparation du tableau d’arguments
$args  = array(
// Rechercher uniquement le rôle
'role' => 'Author',// Auteur
// Afficher les résultat par nom (display_name)
'orderby' => 'display_name',
// On verifi les valeurs des champs qu’on veut récupérer dans le profile des utilisateurs (meta_values)
'meta_query' => array(
    array(
        // uses compare like WP_Query
        'key' => 'departement',//(user_meta_key)
        'value' => 'Paris', // (meta_value)
        'compare' => '='
        ),
    array(
        // Avec
        'key' => 'sexe',
        'value' => 'Féminin',
        ),
    
));

Maintenant que j’ai défini mes critères de recherche il me reste plus qu’a traité et affiché ma liste d’utilisateur que je souhaite démarcher pour ma campagne emailing ciblée.
La première parti WP_User_Query va interroger ma base de données, cette parti du code ne change pas.


// Création de l'objet WP_User_Query
$wp_user_query = new WP_User_Query($args);
// Obtenir les résultats
$authors = $wp_user_query->get_results();

Ensuite on vérifie s’il y a des résultats si oui je récupère le nom, prénom et l’email :
– Nom = first_name
– Prénom = last_name
– Email = user_email


// On vérifie les résultats
if (!empty($authors))
{
    echo '<ul>';
    // Boucle pour afficher les utilisateurs
    foreach ($authors as $author)
    {
        // Obtenir toutes les données de l'utilisateur et les affichés
        $author_info = get_userdata($author->ID);
        echo '<li>'.$author_info->first_name.' '.$author_info->last_name.' '. $author_info->user_email.'</li>';
    }
    echo '</ul>';
} else {
    echo 'Aucun résultat';
}

Une fois que j’ai obtenu ma liste d’utilisateur, il me reste plus qu’a récupérer les informations pour ma campagne emailing.
Vous pouvez améliorer la boucle qui permet d’afficher les résultats faire un tableau html, exporter les résultats au format csv, Excel ou même faire un plugin pour votre blog.


Code final

<?php
// Préparation du tableau d'arguments
$args  = array(
// Rechercher uniquement le rôle
'role' => 'Author',// Auteur
// Afficher les résultat par nom (display_name)
'orderby' => 'display_name',
// On verifi les valeurs des champs qu'on veut récupérer dans le profile des utilisateurs (meta_values)
'meta_query' => array(
    array(
        // uses compare like WP_Query
        'key' => 'departement',//(user_meta_key)
        'value' => 'Paris', // (meta_value)
        'compare' => '='
        ),
    array(
        // Avec
        'key' => 'sexe',
        'value' => 'Féminin',
        ),
    
));
// Création de l'objet WP_User_Query
$wp_user_query = new WP_User_Query($args);
// Obtenir les résultats
$authors = $wp_user_query->get_results();
// On vérifie les résultats
if (!empty($authors))
{
    echo '<ul>';
    // Boucle pour afficher les utilisateurs
    foreach ($authors as $author)
    {
        // Obtenir toutes les données de l'utilisateur et les affichés
        $author_info = get_userdata($author->ID);
        echo '<li>'.$author_info->first_name.' '.$author_info->last_name.' '. $author_info->user_email.'</li>';
    }
    echo '</ul>';
} else {
    echo 'Aucun résultat';
}
?>