Skip to:
Content
Pages
Categories
Search
Top
Bottom

How do I use Buddypress xprofile fields inside bbPress?

  • Avatar of evagorasc
    evagorasc
    Participant

    @evagorasc

    I am mentioning @johnjamesjacoby who first started a thread about this some time ago, and @djpaul who asked that I start a new thread.

    So, 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?

Viewing 10 replies - 1 through 10 (of 10 total)
  • Avatar of evagorasc
    evagorasc
    Participant

    @evagorasc

    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?

    Avatar of @modemlooper
    @modemlooper
    Moderator

    @modemlooper

    `$user_id = $bp->displayed_user->id;

    $location = xprofile_get_field_data( ‘Location’, $user_id ) ;
    echo ‘Location: ‘ . $location;

    if that doesnt work try getting the_author_ID(); or get_post_author_id();`

    Avatar of evagorasc
    evagorasc
    Participant

    @evagorasc

    @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.

    Avatar of @modemlooper
    @modemlooper
    Moderator

    @modemlooper

    When you are not in a BuddyPress loop you can get BP content by using WP author id as it returns same id.

    Avatar of evagorasc
    evagorasc
    Participant

    @evagorasc

    @modemlooper thank you for your help.

    Avatar of evagorasc
    evagorasc
    Participant

    @evagorasc

    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 Friends

    Furthermore, 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.

    Avatar of @modemlooper
    @modemlooper
    Moderator

    @modemlooper

    You have to pass id # of field a string wont work.

    `$data = xprofile_get_field( 2, bp_displayed_user_id() );

    print_r($data) ;`

    This will not give you a members choice. It will only return the default visibility you set up in admin. to get a users visibility on a field you get from user meta.

    `$user_visib = get_user_meta( bp_displayed_user_id(), bp_get_user_meta_key( ‘bp_xprofile_visibility_levels’ ), true );

    print_r($user_visib) ;`

    Avatar of evagorasc
    evagorasc
    Participant

    @evagorasc

    @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.

    Avatar of @modemlooper
    @modemlooper
    Moderator

    @modemlooper

    Can you can post a code snippet so others that search can find info on this?

    Avatar of evagorasc
    evagorasc
    Participant

    @evagorasc

    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 )
    `

Viewing 10 replies - 1 through 10 (of 10 total)

You must be logged in to reply to this topic.