Tagged: custom items, member-loop
Hi,
I am very new to buddypress.
I need to develop a website where there will be 2 member types – “Donor” and “Charity”. On the registration page both of them will select some items either to donate or to get donated.
Now after login one member type will see a list of members from the member type but with common donation items in a wordpress page.
For example,
Donor1 selected Item1, Item2
Charity1 selected Item1, Item2,
Charity2 selected Item2, Item3
Charity3 selected Item3, Item4
Then Donor1 will see only Charity1 and Charity2 because they have the common items.For this I want to use Member Loop –
bp_has_members()
. I think those items are stored as array.Now can anyone help me with this? How can I write the code so that the array of items are checked in the Member Loop and I get the desired result?
Thank you so much.
Hello Anjan,
Welcome to the BuddyDev Forums. Please take a look at the following blog it explains how to show members based on member type.
https://buddydev.com/show-only-users-of-opposite-genders-on-buddypress-site/
Regarding your second requirement for common items. I am supposing you are using Xprofile fields for this. If yes, you can use the Xprofile query within the member’s loop.
Please give it a try.
Regards
RaviHi Ravi
Thank you so much for the suggestion.
Can I have an example how
BP_XProfile_Query
works with a custom field with checkboxes? I thinkBP_XProfile_Query
works will with textbox type fields as the values are single values. But with a checkbox field the values are stored in the database in a serialized array. You can check the screenshot here:
https://ibb.co/BgMRFw1I also tried the
my_custom_id()
function mentioned in Members Loop page: https://codex.buddypress.org/developer/loops-reference/the-members-loop/
But it also works well with textbox fields.I am struggle to find out a solution for checkboxes.
Any suggestions please?
Regards,
AnjanHello Anjan,
Please have a look at the “BP_Xprofile_Queury” class. They have mentioned in the doc comment all supported args.
You will have a better idea to use this. Please let me know if you need further assistance.
Regards
RaviHi Ravi,
Thank you.
So do you mean something like this will work?
$args = array( 'member_type' => 'donor', 'xprofile_query' => array( 'relation' => 'AND', array( 'field_id' => $fieldID, 'value' => $arrayItems, 'compare' => 'IN', ) ), ); $user_query = new BP_User_Query( $args );
Or do I need to make any adjustments?
Regards,
AnjanHello Anjan,
Thank you for sharing the code. No need to add the ‘relation’ key to the Xprofile query.
$args = array( 'member_type' => 'donor', 'xprofile_query' => array( array( 'field_id' => $fieldID, 'value' => $arrayItems, 'compare' => 'IN', ), ), );
You can directly pass this args to the member query. There is no need to create a User_Query instance. Modify the filter_args method from the above mention blog code.
Regards
Ravi- This reply was modified 2 years, 8 months ago by Ravi.
Hi Ravi,
I was almost sure that it will work, but it didn’t so I made these changes in the code and it worked for me now. But I am not sure yet how time taking it will be when there will be more items in the array:
$xprofile_query = array( 'relation' => 'OR'); foreach ($my_items as $key => $value) { $xprofile_query[] = array( 'key'=> $fieldID, 'value' => $value, 'compare' => 'LIKE' ); } $args = array( 'member_type' => 'donor', ); if ($xprofile_query){ $args['xprofile_query'] = $xprofile_query; } $user_query = new BP_User_Query( $args );
Do you have any suggestion?
Thank you.
Hi Ravi,
Thank you for your help.
So here is my another post where I explained the requirement in a little detail:
https://buddypress.org/support/topic/filter-members-based-on-checkbox-type-custom-field/#post-323838So, both the member types need to select the checkboxes for the Items and then, when a user is logged in, I need to show the opposite member types with common items on a WordPress page template.
First, I need to get the opposite member type of the logged in user and then the Items he has selected at the time of registration:
if ( is_user_logged_in() ) { $current_user_id = get_current_user_id(); $current_member_type = bp_get_member_type( $current_user_id ); $current_member_items = xprofile_get_field_data( 'Items', $current_user_id ); // IT GIVES AN ARRAY OF SELECTED ITEMS } if ( 'charity' === $current_member_type ) { $opposite_member_type = 'donor'; } elseif ( 'donor' === $current_member_type ) { $opposite_member_type = 'charity'; }
Then the next query part:
$xprofile_query = array( 'relation' => 'OR'); foreach ($current_member_items as $key => $value) { $xprofile_query[] = array( 'key'=> 'Items', 'value' => $value, 'compare' => 'LIKE' ); } $args = array( 'member_type' => $opposite_member_type, 'type' => 'newest', 'per_page' => 10 ); if ($xprofile_query){ $args['xprofile_query'] = $xprofile_query; } $user_query = new BP_User_Query( $args ); $users = $user_query->results; if($users){ echo $member_ID = $user->ID; echo $user->fullname; // WILL SHOW THE USER DETAILS WITH HTML $items = xprofile_get_field_data( 'Items', $member_ID ); }
I hope this will give you an idea about the requirement. If you think there is a better way to do this then please let me know, as I am completely new to Buddypress.
I have a few questions if you don’t mind:
1/ How can I add pagination with
BP_User_Query
? If I use “Members Loop” withbp_has_members()
then I can easily use the predefined functions to get the pagination, count, user name, permalinks, etc.
https://codex.buddypress.org/developer/loops-reference/the-members-loop/2/ Can I add “xprofile_query” or any “meta_query” array in
bp_has_members()
? If possible then it will be easier to to use those predefined functions to show pagination, count, etc.Any thoughts on these?
Thank you so much.
AnjanHello Anjan,
Thank you for the detailed reply. You do not need BP_User_Query in favour of the BuddyPress Members loop. You can achieve the same thing we members’ loop.
Member’s loop does support Xprofile query and meta query in case of meta_query it does support only single key.
Please check
Regards
Ravi
The topic ‘ [Resolved] How to get opposite member type with common items selected?’ is closed to new replies.