@symm2112
I’m looking to do something similar in having login/register on the same page. That should be simple, but not sure about the profile fields piece. I’m need to implement different registrations for different “types” of users. I can do this with different pages with hidden input fields. Not sure how to work this with different profile questions yet though. Keep us abreast of your progress.
I have it loaded and it works for creating users but I’m debating on where and how to include the login field. I’d like to take it off and disable wp-login.php and have it added to the bp register page but I’m still not quite sure if that will work and still have them fill out their profile fields. Any suggestions? Also, if anyone knows what code needs to be put on the register template to include the same gigya login box that appears on the wp-login.php, i’d be really grateful.
Thanks Devrim. How do I “run” this? Would putting it into bp-custom.php take care of it? I know how to run a SQL query in phpMyAdmin. That’s essentially what this is, right?
Is there a reason not to try this manually in phpMyAdmin? Is the group_id field connected to/dependant on other fields that are easy to overlook?
Hi Peter, I had the same problem, here is the code that will move everything from group_id 1 to group_id 3
Check the id of the secondary group and change the number 3.
—
require_once(‘wp-blog-header.php’);
$x = $wpdb->get_results(“SELECT * FROM wp_bp_xprofile_fields WHERE group_id=1 and is_required=0”);
foreach($x as $k=>$v){
$wpdb->update(‘wp_bp_xprofile_fields’,array(‘group_id’=>3),array(‘id’=>$v->id));
}
Update: Looks like the field needs to exist in wp_bp_xprofile_fields. I manually added it, but it would be nice to figure out how to do it dynamically.
By the way, I have no idea why there are all those breaks. Ignore all the breaks in the code:
this is the real code
<?php while ( bp_profile_fields() ) : bp_the_profile_field(); ?>
<?php if ( bp_get_the_profile_field_name() == 'Gender' ) {
if ( bp_get_the_profile_field_value() == 'Male' )
echo '<img src="male.jpg" alt="male" title="Male" />';
}
?>
etc etc etc
rest of the code
I trust your code works, but I think I just have no idea what I’m doing.
This is what my code looks like:
<br />
<?php while ( bp_profile_fields() ) : bp_the_profile_field(); ?><br />
<?php if ( bp_get_the_profile_field_name() == 'Gender' ) {<br />
if ( bp_get_the_profile_field_value() == 'Male' )<br />
echo '<img src="male.jpg" alt="male" title="Male" />';<br />
}<br />
?><br />
etc etc etc<br />
rest of the code<br />
(I’ve tried with both lowercase and uppercase fields)
I’m just using the Gender one to test this out, I’ve tested it with all these other ones but none of them are working.
What am I doing wrong.
@JJJ
First, is it jjj or JJJ?
Second, is there some way to use the usermeta solution for groups?
Also, I want to change the display of everything (dropdowns, menus, labels, etc.) to account for the different user types (e.g. teachers, students, parents). That would also need to be the case for groups (e.g. classrooms, schools, departments). How would you suggest going about this?
Thanks
bp_the_profile_field_value displays ALL of the values of the fields within the group, and
bp_the_profile_field_name displays ALL of the names of the fields within the group.
I tried what you said with the <?php if ( bp_the_profile_field_name() == ‘color’ ) {
but that still just continues to display ALL of the fields. (And yes I changed the ‘color’ to the proper field name)
Anyone have ideas on how to get a profile fields output to display a picture instead of the text?
Newer versions of BP along with newer templates and MU have solved this by moving those hooks and actions into the template, and BP hijacks the registration before it happens.
It’s happening because of an outdated theme arrangement. I’m going through something similar also at the moment and will be tracking this down shortly.
@wekko, the reason those fields aren’t entered right away is because a registered user isn’t an actual activated user yet. They need to click the link or be activated by the site admin in order to actually get entered into the user tables. In either case, that xprofile data is moved into the xprofile tables when the activation occurs, not when they register.
I found the answer. It’s not Buddypress, it’s WordPress MU. See: https://mu.wordpress.org/forums/topic/15324 . Apparently, wp-activate.php doesn’t load the Buddypress login including the hooks. Weird thing it doesn’t happen to everyone..
Do follow is also a great way to encourage users to create and fill out a profile, specifically if you create custom fields for their “websites” in their profile. Spam registrations are already a major issue ( at least for us ) so that isn’t much of a deterrent for us at least.
The code that I listed will not work as is. You have to make sure that you fill in the correct filenames for images, the correct desired values for profile fields, and the correct field names. Also it looks like I messed up and forgot at least one parenthesis. That’s why I said you’d need to tweak it. It should give you an idea of which functions to use, though.
You can search here for answers :
https://trac.buddypress.org/report
Well, that makes sense. Still, if it’s a bug and it’s fixed in newer versions…someone should know about it right?
In [your-bp-theme-dir]/members/single/profile/profile-loop.php, you’ll see a profile loop beginning while ( bp_profile_fields() ) : bp_the_profile_field();
. Inside of that profile loop you will be able to use various profile functions to test values. For instance,
<?php if ( bp_the_profile_field_name() == 'color' ) {
if ( bp_the_profile_field_value() == 'red' )
echo '<img src="redbadge.png" />';
if ( bp_the_profile_field_value() == 'green'
echo '<img src="greenbadge.png" />';
// etc.
}
?>
I have not tested this but it should work fine with some tweaking.
Your issue with appearance is a CSS thing, most likely that the ul elements are set to display: inline. Try setting them to display: block.
There was a new blunt solution here. Apparently having a couple of required custom profile fields also cuts down spam.
To be honest you aren’t going to get much/any support based on bugs in previous versions of BuddyPress as we may have fixed them in the more recent versions.
Hi there,
I’m still running Buddypress 1.0 since I couldn’t get Buddypress to upgrade without breaking too much. Anyway, I noticed a bug which causes profile fields not to be saved during registration. Editing a profile afterwards does work.
There are more topic on the forum, but no answers (eg. http://buddypress.org/forums/topic/additional-profile-field-data-not-saved-during-signup). Maybe it has something to do with localization (I use the Dutch version) since it doesn’t seem to happen to other people around here.
I dug into the Buddypress code and noticed this particular line in bp-xprofile-signup.php:
add_action( ‘wpmu_activate_user’, ‘xprofile_on_activate_user’, 1, 3 );
The xprofile_on_activate_user function is called on activating an account. This function saves the profile fields which are read from the wpmu user meta table (why aren’t they saved right away on registration?). The wpmu_activate_user action is executed in wpmu-functions.php (do_action(‘wpmu_activate_user’, $user_id, $password, $meta). When I add ‘xprofile_on_activate_user($user_id, $password, $meta)’ manually in that file (just for testing purposes) I get an error this function is undefined. I guess that might cause the troubles?
How can I best fix this or what is causing this?
I’m looking for a way that depending on what my user selects in their profile, it will display a badge, or something in their profile.
Also, how may I access the profile fields when designing my profile. I mean, I don’t want all of the things to fall under that chart, I’d like to move a few of them into other locations.
Thanks
Can you post this in a ticket please?
Ok, I founded out :
if ( bp_has_profile() ) {
while ( bp_profile_groups() ) : bp_the_profile_group();
global $group;
$one_group = array();
$one_group[‘id’] = $group->id;
$one_group[‘name’] = $group->name;
$groups[ $group->id ] = $one_group;
//if ( bp_profile_group_has_fields() ) {
while ( bp_profile_fields() ) : bp_the_profile_field();
//if ( bp_field_has_data() ) {
global $field;
$one_field = array();
$one_field[‘id’] = $field->id;
$one_field[‘name’] = $field->name;
$fields[] = $one_field;
//}
endwhile;
//}
endwhile;
}
Hope that it’s ok to comment those lines…
Seems this has something to do with function has_fields() :
function has_fields() {
$has_data = false;
for ( $i = 0; $i < count( $this->group->fields ); $i++ ) {
$field = &$this->group->fields[$i];
if ( $field->data->value != null ) {
$has_data = true;
}
}
if ( $has_data )
return true;
return false;
}
print_r($field) returns
teststdClass Object ( [id] => 1 [name] => Name [type] => textbox [group_id] => 1 ) stdClass Object ( [id] => 2 [name] => Name [type] => textbox [group_id] => 1 ) stdClass Object ( [id] => 3 [name] => First Name [type] => textbox [group_id] => 1 ) stdClass Object ( [id] => 4 [name] => Both Names [type] => textbox [group_id] => 1 )
print_r($field->data) returns FALSE…
I used this code with BP 1.1.3 to retrieve the fields into my plugin admin options (bp-real-names).
I’m now trying to update it for BP 1.2; the problem is that the function bp_profile_group_has_fields() returns me false; I don’t understand why.
Any idea ?
Thanks !
if ( bp_has_profile() ) {
while ( bp_profile_groups() ) : bp_the_profile_group();
global $group;
$one_group = array();
$one_group[‘id’] = $group->id;
$one_group[‘name’] = $group->name;
$groups[ $group->id ] = $one_group;
print_r(“test”); //prints
if ( bp_profile_group_has_fields() ) {
print_r(“test2”); //do not print
while ( bp_profile_fields() ) : bp_the_profile_field();
if ( bp_field_has_data() ) {
global $field;
$one_field = array();
$one_field[‘id’] = $field->id;
$one_field[‘name’] = $field->name;
$fields[] = $one_field;
}
endwhile;
}
endwhile;
}
Oh yeah, I know that’s there, but that is only the Nickname thing from the wordpress.
I was wondering if there as anyway to edit the other fields (stored by wordpress) on the profile page.