Отсутствует URL в письме для сброса пароля
На странице входа в админку WordPress я нажимаю "Забыли пароль" (не в теме, а в самом WP). Я получаю письмо, но в нем нет URL для перехода. Плагины отключены. Что мне делать?

Проблема заключается в символах <
и >
, которые окружают URL сброса пароля в wp-login.php
. Вы можете удалить их, используя фильтр retrieve_password_message в файле functions.php
вашей темы, как показано ниже:
add_filter("retrieve_password_message", "mapp_custom_password_reset", 99, 4);
function mapp_custom_password_reset($message, $key, $user_login, $user_data ) {
$message = "Кто-то запросил сброс пароля для следующей учетной записи:
" . sprintf(__('%s'), $user_data->user_email) . "
Если это ошибка, просто проигнорируйте это письмо, и ничего не произойдет.
Чтобы сбросить пароль, перейдите по следующей ссылке:
" . network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login') . "\r\n";
return $message;
}

Что означают числа 99 и 4 в следующей строке? Может кто-нибудь объяснить? add_filter("retrieve_password_message", "mapp_custom_password_reset", 99, 4); Вышеприведенный ответ работает для меня, но я не понимаю последние 2 параметра.

Что означают числа 99 и 4 в следующей строке? Может кто-нибудь объяснить? add_filter("retrieve_password_message", "mapp_custom_password_reset", 99, 4); Вышеприведенный ответ работает для меня, но я не понимаю последние 2 параметра. И как я могу получить их для передачи в фильтр?

Число 99 — это приоритет, а 4 — количество аргументов, которые будут переданы в callback-функцию - https://developer.wordpress.org/plugins/hooks/actions/#additional-parameters

Если вы хотите только удалить угловые скобки, добавленные WordPress, оставив остальную часть сгенерированного сообщения без изменений, добавьте следующий код в файл functions.php
вашей темы WordPress (например, wp-content/themes/some_awesome_theme/functions.php
).
/**
* Удаляет угловые скобки (символы < и >) вокруг URL в заданной строке
*
* @param string $string Строка, из которой нужно удалить возможные угловые скобки
*
* @return string Строка $string, где любые угловые скобки, окружающие URL, были удалены.
*/
function remove_angle_brackets_around_url($string)
{
return preg_replace('/<(' . preg_quote(network_site_url(), '/') . '[^>]*)>/', '\1', $string);
}
// Применяем функцию remove_angle_brackets_around_url() к сообщению "восстановления пароля":
add_filter('retrieve_password_message', 'remove_angle_brackets_around_url', 99, 1);

Посмотрите wp-login.php
на GitHub.
Стандартные блоки выглядят так:
// Переопределение user_login гарантирует правильный регистр в 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 = __('Кто-то запросил сброс пароля для следующей учетной записи:') . "\r\n\r\n";
$message .= network_home_url( '/' ) . "\r\n\r\n";
$message .= sprintf(__('Имя пользователя: %s'), $user_login) . "\r\n\r\n";
$message .= __('Если это ошибка, просто проигнорируйте это письмо, и ничего не произойдет.') . "\r\n\r\n";
$message .= __('Для сброса пароля перейдите по следующей ссылке:') . "\r\n\r\n";
$message .= '<' . network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login') . ">\r\n";
Вы можете фильтровать сообщение о сбросе пароля с помощью 'retrieve_password_message'
и изменить его по своему усмотрению.
$message = apply_filters( 'retrieve_password_message', $message, $key, $user_login, $user_data );

У меня была такая проблема, и я хочу поделиться, как её решил.
Открываю письмо и справа, где обычно указано время получения, будут три точки.
Нажимаю на них, затем выбираю "Показать оригинал".
Там вы увидите код письма. Найдите часть, где говорится о необходимости перейти по ссылке.
Скопируйте ссылку, которая находится между знаками < >. Вставьте её в браузер, и вуаля — вы сможете сбросить пароль.

У меня была такая же проблема, и я сделал аналогично Трэвису...
- кликните правой кнопкой на письме
- выберите "Просмотреть исходный код"
- скопируйте ссылку, которую видите под словами "Чтобы сбросить пароль, посетите следующий адрес:"
- вставьте её в поле вашего домена и вуаля.
надеюсь, это тоже поможет :)
