BuddyPress: ¿Cómo obtener información de los usuarios filtrada por algunos datos de perfil x? [cerrado]

2

Quiero que la lista de usuarios con sus ID de correo electrónico, filtrada por algunos datos de x-profile.

Por ejemplo, quiero enviar un correo electrónico a los usuarios que hayan marcado una casilla de verificación en su perfil.

¿Cómo puedo obtener la información de los usuarios filtrada por los datos del perfil x?

    
pregunta Debiprasad 29.04.2013 - 17:20

3 respuestas

7

Querrá usar la clase $wpdb para ejecutar una consulta para usuarios con un determinado campo de perfil x valor.

No soy un experto en MySQL, por lo que es probable que alguien más tenga una mejor manera de escribir esta consulta (si lo hace, compártala y actualizaré mi código), pero a continuación le presentamos un enfoque.

Este enfoque supone que conoce el ID del campo de perfil de BuddyPress en el que desea ejecutar el informe; si no lo hace, puede modificar la consulta para consultar la tabla [prefix]_bp_xprofile_fields para un campo específico y usarla ID para el resto de la consulta.

Este enfoque también supone que está buscando la dirección de correo electrónico asociada a las cuentas de WordPress de los usuarios y no a algún otro campo de correo electrónico que haya definido en BuddyPress, si está buscando una en BuddyPress, deberá realizar una Consulta un poco más complicada porque la tabla [prefix]_bp_xprofile_data tendrá el valor contra el que desea verificar y el valor que desea devolver bajo el campo value en la tabla.

//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

Ahora, no estoy seguro de cómo utilizará estos datos o dónde los implementará, así que lo dejé en el formato de objeto sin formato que devuelve la clase $wpdb .

Probablemente querrá poner esto en un complemento y formatear el valor devuelto en un CSV o algo así si planea incluirlo en un sistema de campaña por correo electrónico (también es probable que desee consultar la tabla de usermeta). los primeros y últimos campos de nombre porque la mayoría de los sistemas de correo electrónico con los que he trabajado también los requieren).

Pero, esto debería hacer que vayas en la dirección correcta.

    
respondido por el Eric Allen 03.05.2013 - 20:14
1

De acuerdo con buddypress xprofile loop puede consultar todos los datos del perfil de usuario con

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

Y luego, en el bucle, puede buscar datos de un perfil específico y hacer lo que quiera, algo como:

         <?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; ?>

¡Quizás esto pueda ayudar!

    
respondido por el Magico 08.05.2013 - 17:16
0

cuando creo un grupo en buddypress, por el nombre del grupo (kanpur) selecciono automáticamente los miembros del nombre del grupo de los datos de xprofile. es decir, selecciona miembros de kanpur de los datos de xprofile automáticamente después de crear el grupo.

    
respondido por el user44067 18.12.2013 - 15:38

Lea otras preguntas en las etiquetas