To simplify my question, I’ve pasted the code in that Chris wrote. I just don’t know how to call the buddypress xprofile fields?
/* ===========================================
Send Emails when User Profile Changes
=============================================*/
// IF EMAIL CHANGES
function sr_user_profile_update_email( $user_id, $old_user_data ) {
$user = get_userdata( $user_id );
if($old_user_data->user_email != $user->user_email) {
$admin_email = "email@yourdomain.com";
$message = sprintf( __( 'This user has updated their profile on the SchoolRise USA Staff Member site.' ) ) . "\r\n\r\n";
$message .= sprintf( __( 'Display Name: %s' ), $user->display_name ). "\r\n\r\n";
$message .= sprintf( __( 'Old Email: %s' ), $old_user_data->user_email ). "\r\n\r\n";
$message .= sprintf( __( 'New Email: %s' ), $user->user_email ). "\r\n\r\n";
wp_mail( $admin_email, sprintf( __( '[Staff Member Site] User Profile Update' ), get_option('blogname') ), $message );
}
}
// Save old user data and meta for later comparison for non-standard fields (phone, address etc.)
function sr_old_user_data_transient(){
$user_id = get_current_user_id();
$user_data = get_userdata( $user_id );
$user_meta = get_user_meta( $user_id );
foreach( $user_meta as $key=>$val ){
$user_data->data->$key = current($val);
}
// 1 hour should be sufficient
set_transient( 'sr_old_user_data_' . $user_id, $user_data->data, 60 * 60 );
}
add_action('show_user_profile', 'sr_old_user_data_transient');
// Cleanup when done
function sr_old_user_data_cleanup( $user_id, $old_user_data ){
delete_transient( 'sr_old_user_data_' . $user_id );
}
add_action( 'profile_update', 'sr_old_user_data_cleanup', 1000, 2 );
The hook you want is xprofile_updated_profile
Full hook:
do_action( 'xprofile_updated_profile', bp_displayed_user_id(), $posted_field_ids, $errors, $old_values, $new_values );
See buddypress\bp-xprofile\bp-xprofile-screens.php
[ Please use a service like gist or pastebin to share large code segments. ]
Thanks for the tip about gist or pastebin.
Unfortunately, I’m not a php guy (I used to code in VBA) so I don’t know enough about what you just gave me to make it work. I think I still have to call the fields, or is it going to be a total rewrite of the code example I gave above to make this work?
Total rewrite.
The hook runs after a BP profile is updated.
Write a function to see what was changed and then maybe send an email.
This should get you started…
function whelund_profile_updated(bp_displayed_user_id(), $posted_field_ids, $errors, $old_values, $new_values) {
// dump the vars for orientation on what to write in the function
var_dump( $posted_field_ids );
// decide whether to send an email, then use wp_email()
}
add_action( 'xprofile_updated_profile', 'whelund_profile_updated', 1, 5 );
Just wanted to follow up…we did come up with a solution for this in case any one else is looking for it.
Full details are now on my blog at Revelation Concept.
function rc_buddypress_profile_update( $user_id ) {
$admin_email = "YOUR-EMAIL@DOMAIN.COM";
$message = sprintf( __( 'Member: %1$s', 'buddypress' ), bp_core_get_user_displayname( $user_id ) ) . "\r\n\r\n";
$message .= sprintf( __( 'Color: %s' ), bp_get_profile_field_data('field=Color') ). "\r\n\r\n";
wp_mail( $admin_email, sprintf( __( '[YOUR SITE] Member Profile Update' ), get_option('blogname') ), $message );
}
add_action( 'xprofile_updated_profile', 'rc_buddypress_profile_update', 10, 5 );