Missing URL in password reset email
From the wp admin login page I click to reset my password (not on the theme, on wp). I get the email but it contains no url to click. Plugins are disabled. What shoud I do?
From the wp admin login page I click to reset my password (not on the theme, on wp). I get the email but it contains no url to click. Plugins are disabled. What shoud I do?
I had this problem and did similar to Travis...
hope this helps too :)
The problem is the <
and >
which surround the reset URL in wp-login.php
. You can remove them using retrieve_password_message in your theme functions.php
file like below:
add_filter("retrieve_password_message", "mapp_custom_password_reset", 99, 4);
function mapp_custom_password_reset($message, $key, $user_login, $user_data ) {
$message = "Someone has requested a password reset for the following account:
" . sprintf(__('%s'), $user_data->user_email) . "
If this was a mistake, just ignore this email and nothing will happen.
To reset your password, visit the following address:
" . network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login') . "\r\n";
return $message;
}
I had this problem and wanted to share how I solved it here.
I opened the email and to the right where you would see the time stamp of when you got the email, there will be three dots.
Click on that and then click "show original"
From there you will see the code for the email. Look for the part of the email where it says you should click on the link.
Copy the link that is within the < > marks. Paste it into your browser and voila, you will be able to reset.
If you only want to remove the angle brackets WordPress added but let the rest of the generated message unchanged, add the following to the functions.php
of your WordPress theme (eg. wp-content/themes/some_awesome_theme/functions.php
).
/**
* Removes angle brackets (characters < and >) arounds URLs in a given string
*
* @param string $string The string to remove potential angle brackets from
*
* @return string $string where any angle brackets surrounding an URL have been removed.
*/
function remove_angle_brackets_around_url($string)
{
return preg_replace('/<(' . preg_quote(network_site_url(), '/') . '[^>]*)>/', '\1', $string);
}
// Apply the remove_angle_brackets_around_url() function on the "retrieve password" message:
add_filter('retrieve_password_message', 'remove_angle_brackets_around_url', 99, 1);
Check out the wp-login.php
on GitHub.
The default blocks looks like:
// Redefining user_login ensures we return the right case in the email.
$user_login = $user_data->user_login;
$user_email = $user_data->user_email;
$key = get_password_reset_key( $user_data );
if ( is_wp_error( $key ) ) {
return $key;
}
$message = __('Someone has requested a password reset for the following account:') . "\r\n\r\n";
$message .= network_home_url( '/' ) . "\r\n\r\n";
$message .= sprintf(__('Username: %s'), $user_login) . "\r\n\r\n";
$message .= __('If this was a mistake, just ignore this email and nothing will happen.') . "\r\n\r\n";
$message .= __('To reset your password, visit the following address:') . "\r\n\r\n";
$message .= '<' . network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login') . ">\r\n";
You should be able to filter the password reset message with 'retrieve_password_message'
and change it to what you need.
$message = apply_filters( 'retrieve_password_message', $message, $key, $user_login, $user_data );
Geeks Mental is a community that publishes articles and tutorials about Web, Android, Data Science, new techniques and Linux security.