Forum Replies Created
-
Sure thing @modemlooper. The code below will look for all the custom fields that a user has filled in, compare them to what should be visible for the currently logged-in user and then loop and display the forum reply user’s data. Instead of simply looping the default titles and data of the xprofile fields, I do a custom switch/case so that I can format each field individually for more control.
`
$user_strAllFields = get_user_meta( bbp_get_reply_author_id(), bp_get_user_meta_key( ‘bp_xprofile_visibility_levels’ ), true );
// get all the completed user fields for this poster
if( $user_strAllFields != null ) :
$user_arrAllFields = array_keys( $user_strAllFields );
else :
$user_arrAllFields = array();
endif;
// get all the fields that should not be displayed for this poster
$user_arrHiddenFields = bp_xprofile_get_hidden_fields_for_user( bbp_get_reply_author_id() );// loop through all the poster filled-in fields
foreach( $user_arrAllFields as $field ) :
// exclude the ones that should not be displayed
if( !in_array( $field, $user_arrHiddenFields ) ) :
// turn the ID of a field into its object
$obj_field = xprofile_get_field( $field, bbp_get_reply_author_id() ) ;// depending on the field name, customize the display
switch( $obj_field->name ) :case ‘Location’ :
$user_location = xprofile_get_field_data( ‘Location’, bbp_get_reply_author_id() ) ;
if (strlen($user_location) > 0 ) :
echo ‘Location: ‘ . $user_location . ‘
‘;
endif;
break;endswitch;
endif; // !in_array( $field, $user_arrHiddenFields ) )
endforeach; //( $user_arrAllFields as $field )
`@modemlooper thanks! I used a combination of your tips and info I found here https://bpdevel.wordpress.com/2012/03/16/profile-field-visibility-in-bp-1-6/ to make this work for me. I now have any custom field in Buddypress show up in my forums loop and it shows up conditionally as well for the appropriate users only.
Aha. Problems.
So, following the advice of @modemlooper I got this working just fine. Anything created under Buddypress custom user fields can display fine in the bbPress loops, using something like this:
`
$user_location = xprofile_get_field_data( ‘Location’, bbp_get_reply_author_id() ) ;
if (strlen($user_location) > 0 ) :
echo ‘Location: ‘ . $user_location . ‘
‘;
endif;
`However, how do I make sure I follow the custom fields’ restrictions regarding visibility? In BuddyPress we can create a custom field and set its visibility to be either:
1) Anyone
2) Logged In Users
3) My FriendsFurthermore, these fields’ visibility can be allowed to be changed by each user.
So, before simply displaying a custom field for just everyone, I need to run the required checks to verify that it should be displayed for the anonymous/logged-in user. I tried getting a reference to the actual field, like this but the var_dump() doesn’t help me much:
`$user_location_field = xprofile_get_field( ‘Location’, bbp_get_reply_author_id() ) ;`
This is the var_dump($user_location_field):
`object(BP_XProfile_Field)[29]
public ‘id’ => null
public ‘group_id’ => null
public ‘parent_id’ => null
public ‘type’ => null
public ‘name’ => null
public ‘description’ => null
public ‘is_required’ => null
public ‘can_delete’ => null
public ‘field_order’ => null
public ‘option_order’ => null
public ‘order_by’ => null
public ‘is_default_option’ => null
public ‘default_visibility’ => null
public ‘allow_custom_visibility’ => string ‘allowed’ (length=7)
public ‘data’ => null
public ‘message’ => null
public ‘message_type’ => string ‘err’ (length=3)`Even though I see a couple of public methods like “default_visibility()” and “allow_custom_visibility()”, they don’t really help. Their value doesn’t even change even when I change the field properties in the CMS.
@modemlooper thank you for your help.
@modemlooper Thank you! That did it.
get_the_author_id() as well as bbp_get_reply_author_id() seem to both work just fine.
get_post_author_id() and $bp->displayed_user->id don’t seem to work for me though.Made some progress with this, but still need help. I figured that I could simply add something like this underneath the avatar:
Code:$location = xprofile_get_field_data( ‘Location’, 10 ) ;
echo ‘Location: ‘ . $location;However, notice the hard-coded “10” there which is an ID. This needs to be the ID of each user in the replies table and it changes with each table row inside the “loop-single-reply.php” file. I don’t mind changing the template file and keeping a record for it when upgrades come, but how do I know the ID of each user in the bbPress posting loop?
@johnjamesjacoby i am running the latest version of BuddyPress and bbPress together (running bbPress as site-wide forums integrated with BuddyPress). I would like to add any custom xprofile BuddyPress fields that I created underneath the avatar of a user in the forums.
The actual code that writes out the replies loop is inside the “loop-single-reply.php” file of the bbPress plugin. But how do I connect to BuddyPress and display any xprofile fields that I want though?
Thank you guys for your help. It helped me make sense of this.
Thank you guys for your recommendations. So, just to make sure I get this right, Buddypress ships with bbPress 1, while the standalone bbPress plugin is at version 2? Then that makes sense not to downgrade.
Also, @mercime what is going to happen with BP 1.7? If I keep the forums inside bbPress 2.x will they then be integrated into the Groups/Forums? Or will they drop the Forums part of the Groups completely?
Anyone any thoughts? @djpaul why would you advice against such a thing? I would think it’s a good choice, no?
No, we don’t have any. We don’t even have Buddypress on the site yet installed.
Actually, it’s the other way around. We need to move stuff into Buddypress. We don’t even use Buddypress yet. We are going to install Buddypress from scratch and are thinking of moving the bbPress Forums/Topics/Replies into Buddypress Groups/Forums/Topics/Replies.
We have tested the bbPress/Buddypress integration and we can see that when someone posts inside the bbPress forums, it shows up in the Activity stream of Buddypress. What we are thinking though, is to move completely into Buddypress.