Hello!
I want to create an xProfile field where users can set a new email address (in addition to ‘user_email’) so they can get the password reset message there. Has anyone attempted something similar?
This is managed by ‘retrieve_password()’ function, which I think is not pluggable. The idea is to send the pass reset message (‘retrieve_password_message’) to that xProfile value, not to ‘user_email’.
Appreciate any suggestion on this.
Best,
JavierHi Javier,
do you have the email field setup?You can filter on ‘retrieve_password_message’ and send mail right there. After that return empty string and WordPress will not send another email.
hope that helps.
Hi Brajesh,
Yes I created the field ‘Personal Email’, which is optional, so first I have to check if its empty.
I couldn’t find out how ‘retrieve_password_message’ manages mail recipient. I hardcoded $user_email with a random address ($user_email = ‘myemail@mysite.com’) just to test, but email’s still reaching WP ‘user_email’ field. (Of course I didn’t use ‘myemail@mysite.com’ but other I have access to).
Thanks for the feedback.
- This reply was modified 8 years, 6 months ago by Javier.
Hi Javier,
Please try the following code in your theme functions.php file and let me know it works or not.
function buddy_new_reset_password_email( $message, $key, $user_login, $user_data ) { // get the user data is user object you need to fetch xprofile email value. user $user_data->data->ID to fetch the details $user_email = 'ravivats89@gmail.com'; if ( is_multisite() ) { $blogname = $GLOBALS['current_site']->site_name; } else { $blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES); } $title = sprintf( __('[%s] Password Reset'), $blogname ); if ( $message && ! wp_mail( $user_email, wp_specialchars_decode( $title ), $message ) ) wp_die( __('The email could not be sent.') . "<br />\n" . __('Possible reason: your host may have disabled the mail() function.') ); $message = ''; return $message; } add_filter('retrieve_password_message','buddy_new_reset_password_email' );
Thank You
RaviHello Ravi,
This works pretty well, thank you very much!
Now I need to fetch the xProfile email value and check if its empty. Maybe it would be better to do this outside ‘buddy_new_reset_password_email()’ within another function. I’m not a php black belt, just guessing the smartest way to do this.
Thank you again,
JavierHi Javier,
you can replace this line$user_email = 'ravivats89@gmail.com';
By following
$field_id = "Your email field ID"; $email = xprofile_get_field_data( $field_id, $user_data->id ); if ( !is_email( $email ) ) { $email = $user_data->user_email; }
That will do it.
Hi Brajesh,
Unfortunately is not working. Some arguments missing:
Warning: Missing argument 2 for buddy_new_reset_password_email() [...] on line 3 Warning: Missing argument 3 for buddy_new_reset_password_email() [...] on line 3 Warning: Missing argument 4 for buddy_new_reset_password_email() [...] on line 3 Notice: Undefined variable: user_data in [...] on line 6 Notice: Trying to get property of non-object in [...] on line 6 Notice: Undefined variable: user_data in [...] on line 9 Notice: Trying to get property of non-object in [...] on line 9 Notice: Undefined variable: user_email in [...] on line 20
Also, I think we need to override $user_email, instead of $email. I turned $email to $user_email, but still getting the missing arguments.
Thank you for your time,
JavierHi Javier,
The problem is with this line by Raviadd_filter('retrieve_password_message','buddy_new_reset_password_email' );
Please change it to
add_filter('retrieve_password_message','buddy_new_reset_password_email', 10, 4 );
That will do it.
The topic ‘ [Resolved] Additional email address for password recovery purposes’ is closed to new replies.