web-dev-qa-db-fra.com

BuddyPress: Comment obtenir des informations sur les utilisateurs filtrées par des données de profil x?

Je veux la liste des utilisateurs avec leurs identifiants de messagerie filtrés par certaines données de x-profile.

Par exemple, je souhaite envoyer un courrier électronique aux utilisateurs qui ont coché une case à cocher dans leur profil.

Comment obtenir les informations des utilisateurs filtrées par les données du profil x?

2
Debiprasad

Vous souhaiterez utiliser la classe $wpdb pour exécuter une requête pour les utilisateurs ayant une certaine valeur de champ de profil x.

Je ne suis pas un expert de MySQL, donc quelqu'un d'autre a probablement un meilleur moyen d'écrire cette requête (si vous le faites, partagez-la et je mettrai à jour mon code), mais voici une approche.

Cette approche suppose que vous connaissiez l'ID du champ du profil BuddyPress sur lequel vous souhaitez exécuter le rapport. Sinon, vous pouvez modifier la requête pour rechercher dans la table [prefix]_bp_xprofile_fields un champ spécifique et utiliser son ID pour le reste de la recherche. la requête.

Cette approche suppose également que vous recherchiez l'adresse électronique associée aux comptes WordPress des utilisateurs et non un autre champ d'adresse électronique que vous avez défini dans BuddyPress. Si vous en recherchez un dans BuddyPress, vous devrez effectuer une tâche un peu plus compliquée. requête parce que la table [prefix]_bp_xprofile_data aura la valeur que vous souhaitez vérifier et la valeur que vous souhaitez renvoyer dans le champ value de la table.

//create a simple function that will retrieve your desired results
function wpse97684_get_desired_users($field_id, $field_val) {
    //$field_id: (int) this is the ID of the field you'd like to check against
    //$field_val: (str) this is the value you want those users to have in the field

    global $wpdb;
    $bp_table = $wpdb->prefix . 'bp_xprofile_data'; 

    $query = $wpdb->prepare(
        "SELECT U.user_email " .
        "FROM $bp_table B, $wpdb->users U " .
        "WHERE B.user_id = U.ID " .
        "AND B.field_id = %d " .
        "AND B.value = %s"
       , $field_id
       , $field_val
    );

    $get_desired = $wpdb->get_results($query);

    if(count($get_desired)) {
        return $get_desired;
    } else {
        return false;
    }
}

//to call this function, just pass the desired field ID and the desired value
wpse97684_get_desired_users(4, 'Yes'); //example

Maintenant, je ne suis pas certain de la manière dont vous utiliserez ces données ni de l'endroit où vous les implémenterez. Je l'ai donc laissé au format d'objet brut renvoyé par la classe $wpdb.

Vous voudrez probablement mettre cela dans un plug-in et formater la valeur renvoyée dans un fichier CSV ou autre chose si vous envisagez de l'insérer dans un système de campagne par courrier électronique (vous voudrez probablement aussi vérifier la table usermeta champs de nom de famille, car la plupart des systèmes de messagerie avec lesquels j'ai travaillé en ont besoin également).

Mais cela devrait vous faire avancer dans la bonne direction.

7
Eric Allen

Selon la boucle buddypress xprofile vous pouvez interroger toutes les données de profil utilisateur avec

<?php if ( bp_group_has_profile( 'user_id=10' ) ) : ?>

Et dans la boucle, vous pouvez rechercher une donnée de profil spécifique et faire ce que vous voulez, quelque chose comme:

         <?php while ( bp_profile_fields() ) : bp_the_profile_field(); ?>

              <?php if ( bp_field_has_data() ) : ?>

                <?php if (bp_the_profile_field_name() == 'yourCheckboxFieldId') && bp_the_profile_field_value() == 'checked'){
//SEND EMAIL!
    }

     ?>


              <?php endif; ?>

            <?php endwhile; ?>

Peut-être que cela peut aider!

1
Magico

quand je crée un groupe sur buddypress, par le nom du groupe (kanpur), sélectionnez automatiquement les membres du nom du groupe à partir des données xprofile. c'est-à-dire qu'il sélectionne automatiquement les membres kanpur à partir des données xprofile après la création du groupe.

0
user44067