Skip to content

Instantly share code, notes, and snippets.

Created Dec 11, 2013
Embed
What would you like to do?
Filter Members List Based On Profile Field - Female members are served a directory of males and male members are served a directory of females.
class BP_Custom_User_Ids {
private $custom_ids = array();
public function __construct() {
$this->custom_ids = $this->get_custom_ids();
add_action( 'bp_pre_user_query_construct', array( $this, 'custom_members_query' ), 1, 1 );
add_filter( 'bp_get_total_member_count', array( $this, 'custom_members_count' ), 1, 1 );
}
private function get_custom_ids() {
global $wpdb;
// collection based on an xprofile field
$custom_ids = $wpdb->get_col("SELECT user_id FROM {$wpdb->prefix}bp_xprofile_data WHERE field_id = 5 AND value = 'Female'");
return $custom_ids;
}
function custom_members_query( $query_array ) {
$query_array->query_vars['include'] = $this->custom_ids;
}
function custom_members_count ( $count ) {
$new_count = count( $this->custom_ids );
return $count - $new_count;
}
}
function custom_user_ids( ) {
new BP_Custom_User_Ids ();
}
add_action( 'bp_before_directory_members', 'custom_user_ids' );
<?php if ( bp_has_members( bp_ajax_querystring( 'members' ) ) ) : ?>
@shanebp
Copy link

shanebp commented Dec 11, 2013

private function get_custom_ids() {
    global $wpdb;

    //figure out if the logged-in user is male or female
   $sex = xprofile_get_field_data( 5, bp_loggedin_user_id() );

   if ( $sex == 'Male' ) 
      $query = "SELECT user_id FROM {$wpdb->prefix}bp_xprofile_data WHERE field_id = 5 AND value = 'Female'";
   else 
      $query = "SELECT user_id FROM {$wpdb->prefix}bp_xprofile_data WHERE field_id = 5 AND value = 'Male'";          


    $custom_ids = $wpdb->get_col( $query );


    return $custom_ids;
}

Loading

@Aliyah-zz
Copy link

Aliyah-zz commented Dec 11, 2013

Aah nevermind. You are a genius. Thank you very much. Theres a bounty for this on stack, question is still unanswered.

Loading

@developez
Copy link

developez commented Feb 24, 2014

How can we pass to get_custom_ids() method parameters from the Members Page?

Loading

@carstenlund
Copy link

carstenlund commented Jan 21, 2018

Hi there, in my site, this code returns the female directory to both genders logging in. But a really cool thing about this code is that it also affects the BuddyPress Members and Recently Active Members widgets, by listing the relevant gender.

Regards

class BP_Custom_User_Ids {

private $custom_ids = array();

public function __construct() {

    $this->custom_ids = $this->get_custom_ids();
     
    add_action( 'bp_pre_user_query_construct',  array( $this, 'custom_members_query' ), 1, 1 );
    add_filter( 'bp_get_total_member_count',    array( $this, 'custom_members_count' ), 1, 1 );
 
}
 
private function get_custom_ids() {
    global $wpdb;

    // collection based on an xprofile field
    $custom_ids = $wpdb->get_col("SELECT user_id FROM {$wpdb->prefix}bp_xprofile_data WHERE field_id = 5 AND value = 'Female'");


    return $custom_ids;
}  
 
function custom_members_query( $query_array ) {

    $query_array->query_vars['include'] = $this->custom_ids;

}  
 
function custom_members_count ( $count ) {

    $new_count = count( $this->custom_ids );
    return $count - $new_count;

}

}

function custom_user_ids( ) {

new BP_Custom_User_Ids ();

}

add_action( 'bp_before_directory_members', 'custom_user_ids' );

Loading

@AdventurouslySocial
Copy link

AdventurouslySocial commented Nov 29, 2019

I may be a bit dense, but I am unclear as to which buddypress files or wordpress files these two code snippets should be placed? Could you spell it out for me please?

Thank you.

Loading

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment