Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Filters Users based on Gender. Make sure only users of opposite genders are visible.
- */
- class BuddyDev_Gender_Based_Member_Filter {
- /**
- * Boot
- *
- * @return BuddyDev_Gender_Based_Member_Filter
- */
- public static function boot() {
- $self = new self();
- $self->setup();
- return $self;
- }
- /**
- * Setup hooks.
- */
- private function setup() {
- add_action( 'bp_pre_user_query', array( $this, 'exclude_same_gender_users' ), 9 );
- add_action( 'bp_template_redirect', array( $this, 'check_access' ), 10, 2 );
- }
- // Modifies members loop args to filter out users of same gender.
- public function exclude_same_gender_users( BP_User_Query $query ) {
- // do not filter if user is not logged in, or is super admin or we are inside dashboard.
- if ( ! is_user_logged_in() || is_super_admin() || ( is_admin() && ! defined( 'DOING_AJAX' ) ) ) {
- return;
- }
- $opposite_gender = $this->get_opposite_gender( bp_loggedin_user_id() );
- if ( $opposite_gender ) {
- $query->query_vars['xprofile_query'] = array(
- array(
- 'field' => bp_get_xprofile_gender_type_field_id(), // field id or name.
- 'value' => $opposite_gender,
- 'compare' => '=',
- ),
- );
- }
- }
- // Restricts access to user profile.
- // Only allows profile owner, user of opposite gender or site admins to view.
- public function check_access() {
- if ( ! is_user_logged_in() || ! bp_is_user() || bp_is_my_profile() || is_super_admin() ) {
- return;
- }
- $user_gender = $this->get_user_gender( bp_loggedin_user_id() );
- $displayed_user_gender = $this->get_user_gender( bp_displayed_user_id() );
- // do not allow access for same gender.
- if ( $displayed_user_gender === $user_gender ) {
- bp_core_add_message( __( 'Access denied.', 'yym-helper' ) );
- bp_core_redirect( bp_loggedin_user_domain() );
- }
- }
- // Get user gender
- private function get_user_gender( $user_id ) {
- return xprofile_get_field_data( bp_get_xprofile_gender_type_field_id(), $user_id );
- }
- // Finds the opposite gender
- private function get_opposite_gender( $user_id ) {
- $user_gender = $this->get_user_gender( $user_id );
- if ( empty( $user_gender ) ) {
- return null;
- }
- if ( $user_gender === 'his_Male' ) {
- return 'her_Female';
- } elseif ( $user_gender === 'her_Female' ) {
- return 'his_Male';
- }
- return null;
- }
- }
- BuddyDev_Gender_Based_Member_Filter::boot();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement