BP Profile Search › Customising the members loop and using this plugin
-
AuthorPost
-
DanielGuest
Hi
It seems as though customising the members loop as recommended on the BuddyPress website seems to break this plugin as it will not filtered when the members loop is customised as shown:
if ( bp_has_members(bp_ajax_querystring( ‘members’ ).’&type=alphabetical&include=’. include_experts() ) )
andreaPlugin AuthorHi Daniel,
Could you point me to the page where they offer that suggestion?
In my opinion that’s not the correct way to customize the members loop when the include query arg is present, because it will certainly break all the plugins that use the same query arg, as BP Profile Search does.
If you are interested I could post the correct way to achieve the same customization.
DanielGuestActually, I just noticed on this page (https://codex.buddypress.org/developer/loops-reference/the-members-loop/) they don’t have the bp_ajax_querystring function in the code examples. Only in the default setup.
Yes please do show me as I think I have it set up wrong.
andreaPlugin AuthorYou can add this code in your theme functions.php or in bp-custom.php:
add_action ('bp_ajax_querystring', 'expert_inclusion', 10, 2); function expert_inclusion ($qs=false, $object=false) { if ($object != 'members') return $qs; $args = wp_parse_args ($qs); $users = explode (',', include_experts ()); if (isset ($args['include'])) { $included = explode (',', $args['include']); $users = array_intersect ($users, $included); if (count ($users) == 0) $users = array (0); } $args['include'] = implode (',', $users); $qs = build_query ($args); return $qs; }
DanielGuestHi Andrea
Thanks for that code. That doesn’t seem to do anything though. It isn’t returning the ‘expert’ users, but everyone. I tried this in both functions.php and bp-custom.php.
Is my members loop now supposed to be just
if ( bp_has_members(bp_ajax_querystring( 'members' ) ) ) :
?
Also, is it possible to set the ‘order by’ using
$args[‘type’] = ‘alphabetical’;
?
Is it possible to make this dynamic in case people change the order by type?
DanielGuestThis seems to work 🙂
function expert_loop_querystring( $query_string, $object ) { if ( ! empty( $query_string ) ) { $query_string .= '&'; } $query_string .= 'type=alphabetical&include='.include_experts(); return $query_string; } add_filter( 'bp_ajax_querystring', 'expert_loop_querystring', 20, 2 );
andreaPlugin AuthorI’m glad to hear you made it work!
The general idea of my code snippet was the same, but your implementation is simpler and better yet, it works! I only suggest you add this as the first line in your function:
if ($object != 'members') return $query_string;
DanielGuestIs that to stop it filtering if it isn’t the members loop?
andreaPlugin AuthorYes, exactly.
-
AuthorPost