0

I have a xprofile field called Departments the department has three types of value (IT/ISM,Engineering,Others),so if engineering user logged in member page it will show only the members who are Engineering ,when IT/ISM user logged in member page it will show only the members who are IT/ISM ,if admin or others logged in it will show all the members in the member page ,right now engineering is working but if IT/ISM user logged in it shows IT/ISM and Others ,if admin logged in it shows IT/ISM and Others it not showing engineering to admin and please guide me how to make it

Please see my code

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;

    //figure out if the logged-in user is engineer or it
   $s = xprofile_get_field_data( 2, bp_loggedin_user_id() );

   if ( $s == 'IT/ISM' ) 
      $query = "SELECT user_id FROM {$wpdb->prefix}bp_xprofile_data WHERE field_id = 2 AND value = 'IT/ISM'";


   else
       $query = "SELECT user_id FROM {$wpdb->prefix}bp_xprofile_data WHERE field_id = 2 AND value = 'Engineering'";    



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


    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 $new_count;

    }
}

function custom_user_ids( ) {

    new BP_Custom_User_Ids ();

}

add_action( 'bp_before_directory_members', 'custom_user_ids' );
1

Try:

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;

        //figure out if the logged-in user is engineer or it
       $s = xprofile_get_field_data( 2, bp_loggedin_user_id() );

        if( is_super_admin() ) {
              $custom_ids = false;
        }
        elseif ( $s == 'IT/ISM' ) {
              $query = "SELECT user_id FROM {$wpdb->prefix}bp_xprofile_data WHERE field_id = 2 AND value = 'IT/ISM'";
              $custom_ids = $wpdb->get_col( $query );
        }
        elseif ( $s == 'Engineering' ) {
              $query = "SELECT user_id FROM {$wpdb->prefix}bp_xprofile_data WHERE field_id = 2 AND value = 'Engineering'";    
              $custom_ids = $wpdb->get_col( $query );
        }
        else {
           $custom_ids = false;
        }

        return $custom_ids;
    }

    function custom_members_query( $query_array ) {

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

    }  

    function custom_members_count ( $count ) {

        if( $this->custom_ids == false )
            return $count;
        else {
            $new_count = count( $this->custom_ids );
            return $new_count;
        }
    }
}
  • Thanks but now the pagination is not working properly ,i have 50 engineers member, if i logged in as engineering in member pagination its shows page up to 3 its right because each page shows 20 member if i click page 2 it not showing engineering it shows the all the memebr and with more pageination what i want only show other 20 engineering memeber if i click page 2 or 3 do u know how to fix this – Raja Jun 23 '15 at 5:04

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.