Отсутствует URL в письме для сброса пароля

16 нояб. 2016 г., 13:01:33
Просмотры: 13.6K
Голосов: 9

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

4
Комментарии

что же он отправляет?

Third Essential Designer Third Essential Designer
16 нояб. 2016 г. 15:22:37

Он отправляет письмо о том, что кто-то запросил новый пароль, и мне нужно подтвердить, перейдя по следующей ссылке. Но там нет ссылки, только пустая строка.

tt24 tt24
24 нояб. 2016 г. 19:58:28

У меня та же самая проблема уже несколько лет: как WordPress до сих пор это не исправил? Неужели она не такая распространённая?

CDuv CDuv
13 мая 2019 г. 13:50:15

Эта ошибка до сих пор существует в WordPress. Я не понимаю, почему её не исправили.

Feriman Feriman
1 дек. 2019 г. 20:13:17
Все ответы на вопрос 5
4
10

Проблема заключается в символах < и >, которые окружают 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;

}
7 нояб. 2017 г. 17:03:22
Комментарии

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

Amit Joshi Amit Joshi
11 янв. 2020 г. 16:17:21

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

Amit Joshi Amit Joshi
11 янв. 2020 г. 16:31:19

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

Luke Seall Luke Seall
13 янв. 2020 г. 12:02:50

Почему символы "больше" и "меньше" вызывают проблему? Раньше я никогда такого не видел...

Andrew Schultz Andrew Schultz
11 мар. 2020 г. 16:39:13
0

Если вы хотите только удалить угловые скобки, добавленные 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);
13 мая 2019 г. 16:51:49
0

Посмотрите 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 );
16 нояб. 2016 г. 15:43:37
0

У меня была такая проблема, и я хочу поделиться, как её решил.

Открываю письмо и справа, где обычно указано время получения, будут три точки.

Нажимаю на них, затем выбираю "Показать оригинал".

Там вы увидите код письма. Найдите часть, где говорится о необходимости перейти по ссылке.

Скопируйте ссылку, которая находится между знаками < >. Вставьте её в браузер, и вуаля — вы сможете сбросить пароль.

24 мая 2019 г. 22:07:30
0

У меня была такая же проблема, и я сделал аналогично Трэвису...

  1. кликните правой кнопкой на письме
  2. выберите "Просмотреть исходный код"
  3. скопируйте ссылку, которую видите под словами "Чтобы сбросить пароль, посетите следующий адрес:"
  4. вставьте её в поле вашего домена и вуаля.

надеюсь, это тоже поможет :)

7 февр. 2020 г. 14:35:31