Skip to:
Content
Pages
Categories
Search
Top
Bottom

How can I hide certain xprofile custom fields groups in the registration page?


  • Gene53
    Participant

    @gene53

    Hi,

    I’m building a BP/WP single install site for a local organization and the extra profile fields are divided in 4 sections:

    Group 1- Full Name (base group)

    Group 2- General Info (location, age, gender, occupation)

    Group 3 – Personal Info (bio, interests, etc.)

    Group 4 – Contact (messengers ID’s, Twitter, etc.)

    What I’m trying to accomplish is to hide groups 3 and 4 on the registration page not to overwhelm the user with a bunch of fields to fill out during sign-up, those fields can be filled out once the user has activated her/his account via “edit profile”.

    Thanks,

    Gene

Viewing 25 replies - 1 through 25 (of 29 total)

  • jivany
    Participant

    @jivany

    Basically, check your register.php main loop and only show the groups you want to show.

    You’re looking for the while loop after the bp_is_active( ‘xprofile’ ) call.

    Within the loop, you can filter out groups by doing a simple if check using if (bp_the_profile_group() == "group number") where group number is the number of the group you want to show.

    Similar sort of idea in this thread: https://buddypress.org/forums/topic/profile-fields-questions


    jivany
    Participant

    @jivany

    Basically, check your register.php main loop and only show the groups you want to show.

    You’re looking for the while loop after the bp_is_active( ‘xprofile’ ) call.

    Within the loop, you can filter out groups by doing a simple if check using if (bp_the_profile_group() == "group number") where group number is the number of the group you want to show.

    Similar sort of idea in this thread: https://buddypress.org/forums/topic/profile-fields-questions


    Gene53
    Participant

    @gene53

    Thanks jivany, if I want to filter out groups 3 and 4, do I simply need to replace your above code’s “group number” with “3, 4”?

    Thanks again


    Gene53
    Participant

    @gene53

    Thanks jivany, if I want to filter out groups 3 and 4, do I simply need to replace your above code’s “group number” with “3, 4”?

    Thanks again


    jivany
    Participant

    @jivany

    You would probably have to do something like:

    if( bp_the_profile_group != "3" || bp_the_profile_group != "4" ) {
    //display the profile stuff in register.php
    }

    You should be able to just toss that check near the top of that while loop and then remember your closing brace at the bottom.


    jivany
    Participant

    @jivany

    You would probably have to do something like:

    if( bp_the_profile_group != "3" || bp_the_profile_group != "4" ) {
    //display the profile stuff in register.php
    }

    You should be able to just toss that check near the top of that while loop and then remember your closing brace at the bottom.


    Gene53
    Participant

    @gene53

    Thanks, I’ll give it a whirl tomorrow.


    Gene53
    Participant

    @gene53

    Thanks, I’ll give it a whirl tomorrow.


    Gene53
    Participant

    @gene53

    @jivany, I’ve been playing around with this all afternoon but to no avail (learning PHP as I go along), either group no. 2 shows up but group 1 (name) doesn’t, or group 1 and only 1 field out of 6 from group 2 or neither groups 1 and 2.

    I give up, LOL

    Thanks,

    Gene


    jivany
    Participant

    @jivany

    OK. I’m thinking you can do something like this. Find this part of the file in register.php:

    <?php /***** Extra Profile Details ******/ ?>

    <?php if ( bp_is_active( 'xprofile' ) ) : ?>
    <div class="register-section" id="profile-details-section">

    <h4><?php _e( 'Profile Details', 'buddypress' ) ?></h4>

    <?php /* Use the profile field loop to render input fields for the 'base' profile field group */ ?>
    <?php if ( function_exists( 'bp_has_profile' ) ) : if ( bp_has_profile( 'profile_group_id=1' ) ) : while ( bp_profile_groups() ) : bp_the_profile_group(); ?>

    <?php while ( bp_profile_fields() ) : bp_the_profile_field(); ?>

    At this point, add in a line like:

    if( (bp_the_profile_group != "3") || (bp_the_profile_group != "4") ) :

    Then go down to this part of the file:

    <?php endwhile; ?>

    <input type="hidden" name="signup_profile_field_ids" id="signup_profile_field_ids" value="<?php bp_the_profile_group_field_ids() ?>" />

    <?php endwhile; endif; endif; ?>

    </div><!-- #profile-details-section -->

    Before the first endwhile line, insert this:

    <?php endif; ?>

    I *think* that should spit out groups 3 & 4 (assuming you have groups 3 & 4 defined in your profile groups). You might need to add in group “1” also to get the Base. The only part I’m not sure about right now is if the number need to be in double quotes or just bare. So it might be:

    if( (bp_the_profile_group != 3) || (bp_the_profile_group != 4) ) :

    I think. ;)


    Gene53
    Participant

    @gene53

    Oops,sorry, I think there was a misunderstanding, bp-register loads all groups by default, what I’m trying to accomplish is to hide (or not load) groups 3 and 4 so the user can fill those optional field groups once they’ve activated their accounts..


    jivany
    Participant

    @jivany

    OK, now I’m scratching my head.

    When I create a second group, even if I tag the fields in the second group as “required”, they don’t show up on the register page (the bp-default version). The second group only shows up on the user’s profile page where they can edit the fields. They are tagged as “required” but nothing seems to force the user to fill them out.

    I’m confused now as to what you’re seeing and/or trying to do.


    Gene53
    Participant

    @gene53

    Darn, you’re right, I restored an original version of register.php and only group 1 shows. I’ll go and try your code to see if I can get group 2 to load.

    Sorry about that…


    jivany
    Participant

    @jivany

    No worries. The code I gave should display everything except group 3 & 4. Sorry, I think I said it backwards in the previous post.

    That said, even without the code, I’m only getting group 1 showing up on the registration page so I’m not really sure what’s going on in register.php now. ;)


    Gene53
    Participant

    @gene53

    Nope, only getting group 1. I wonder if:

    <?php if ( function_exists( 'bp_has_profile' ) ) : if ( bp_has_profile( 'profile_group_id=1' ) ) : while ( bp_profile_groups() ) : bp_the_profile_group(); ?>

    can be modified to fetch group 2 also.

    LOL, this is driving me nuts…


    jivany
    Participant

    @jivany

    Nope, I don’t think so. I was thinking you could remove the ‘profile_group_id=1’ arg from bp_has_profile but that doesn’t seem to allow the registration page to show more groups. I guess it appears that the only “required” fields for registration are the required ones in the Base group.

    Might be worth opening a ticket on this one to see if that is the expect behaviour. Alternatively, ping R-a-y or DJPaul and see if they know.

    So, yes, by default, the register page only shows group 1 (the “base” group). You only retrieve one group via the profile_group_id= parameter in the bp_has_profile() call.

    So, by default, this happens:

    What I’m trying to accomplish is to hide groups 3 and 4 on the registration page not to overwhelm the user with a bunch of fields to fill out during sign-up, those fields can be filled out once the user has activated her/his account via “edit profile”.

    There have been other threads on the forum regarding showing more than one profile group on the registration page; I found several, but take a look at https://buddypress.org/forums/topic/all-fields-for-registration. It’s probably going to be really difficult to implement unless you have a decent understanding of PHP.


    Gene53
    Participant

    @gene53

    Thanks guys, I’ll drop the idea being that it’s way too complicated for what it’s worth.

    My reason for having the mandatory name field only (which I renamed Username) in group 1 is that the site I’m working on is username only and thanks to Brajesh Singh’s modifications in edit.php, group 1 can’t be edited by the users.

    So, my only alternative is to restore the original edit.php file, move the group 2 fields to group 1 so they may be filled out during registration but I wonder if there would be a simple way to hide or “gray out” the name field in edit.php so the user can’t change it.


    jivany
    Participant

    @jivany

    Well, yes, you should be able to make the username field non-editable. I would assume the username field is a “textbox” type. In edit.php, you should be able to just filter out the username field and not create a form “textbox” HTML element. So, in member/single/profile/edit.php around line 21, add in a check something like:

    <?php if ( 'username' == bp_get_the_profile_field_name() ) : ?>
    // Just display the Username with bp_the_profile_field_name() and add HTML to style how you want.
    <?php else : ?>
    // Do the existing <label... code on line 23 and 24
    <?php endif; ?>

    Now, a creative user might still be able to circumvent your little hack and submit their change directly to the form. I see a nonce being used though in the form so that might not be too much of a concern after all.


    Gene53
    Participant

    @gene53

    @jivany Wow, thanks, I simply added:

    <?php if ( 'Username' == bp_get_the_profile_field_name() ) : ?>

    <?php else : ?>

    under:

    <?php if ( 'textbox' == bp_get_the_profile_field_type() ) : ?>

    inserted a endif where you indicated, didn’t do any HTML formatting and the Username field is now hidden.

    Thanks again!

    Gene


    Gene53
    Participant

    @gene53

    Oops, spoke too soon, if I edit anything in group 1 (where Username is hidden), I get “Please make sure you fill in all required fields in this profile field group before saving” even though everything has been filled.

    Oh well, back to the drawing board. Maybe the code wasn’t inserted in the right place and/or I have to add HTML but I haven’t a clue as to what I should add.


    jivany
    Participant

    @jivany

    Oh, nope, it probably means that the code is actually checking that the field ‘username’ should be getting updated. I was sort of wondering if that would happen. ;)


    Gene53
    Participant

    @gene53

    Hey jivany,

    I was sort of wondering if that would happen

    LOL, it sure did so I’m wondering if there was a workaround, such as the field not being visible (or non editable) but would still send the name field when the form is submitted.

    Darn, I miss the good old days (phpBB 1 and 2) when you only had to comment out code in templates…


    jivany
    Participant

    @jivany

    <input type="hidden" name="field_ids" id="field_ids" value="<?php bp_the_profile_group_field_ids() ?>" />

    That line is your problem. Well, more specifically, the call to bp_the_profile_group_field_ids() which creates a list of the expected field names.

    Unfortunately it doesn’t have a filter so you’d have to clone and own the function into your functions.php file and manually filter out the “username” field from the string that gets generated.

    Make sense?


    Gene53
    Participant

    @gene53

    Makes sense but I haven’t a clue on how I could code such a function… That’s way above my programming skills.

Viewing 25 replies - 1 through 25 (of 29 total)
  • The topic ‘How can I hide certain xprofile custom fields groups in the registration page?’ is closed to new replies.
Skip to toolbar