Как изменить текст стандартного письма для сброса (восстановления) пароля?

5 дек. 2018 г., 03:38:29
Просмотры: 42.6K
Голосов: 5

Я нашел похожие вопросы, но не смог применить предложенные решения.

Стандартное письмо для сброса пароля, которое отправляет WordPress, не предоставляет кликабельную ссылку для пользователей, сбрасывающих свой пароль. Вот как выглядит текущее письмо: Пример стандартного письма сброса пароля WordPress

Похоже, что URL сайта (https://jewelbound.com) должен быть внизу, соединен с "/wp-login.php?action......"

Пожалуйста, помогите мне понять, как изменить следующий код шаблона письма, чтобы удалить URL "https://jewelbound.com/" сверху, добавить его к предоставленному URL внизу и сделать одну длинную, связанную (и кликабельную) ссылку, которая позволит пользователю сбросить свой пароль. Вот шаблон из моего файла wp-login.php:

$message = __( 'Кто-то запросил сброс пароля для следующей учетной записи:' ) . "\r\n\r\n";
    /* переводчики: %s: название сайта */
    $message .= sprintf( __( 'Название сайта: %s'), $site_name ) . "\r\n\r\n";
    /* переводчики: %s: логин пользователя */
    $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";

    /* переводчики: Тема письма для сброса пароля. %s: Название сайта */
    $title = sprintf( __( '[%s] Сброс пароля' ), $site_name );

Заранее спасибо всем, кто готов помочь!

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

network_site_url() не return результат, а использует echo

InanisAtheos InanisAtheos
4 дек. 2019 г. 15:47:36
Все ответы на вопрос 1
0
10

Чтобы ответить на ваш конкретный вопрос: "Как изменить текст стандартного письма для сброса (восстановления) пароля", ответом будет использование фильтра retrieve_password_message. В конечном итоге это может решить вашу проблему.

Но я думаю, вам нужно копнуть глубже, чтобы понять, что на самом деле происходит. В своем вопросе вы спрашивали о изменении "стандартного текста письма для сброса пароля", но то, что у вас есть сейчас, не является реальным стандартным текстом. Если бы это было так, URL-адрес был бы цельным, а не разделенным, как сейчас.

Я бы начал с деактивации всех плагинов и переключения с текущей темы на стандартную тему WordPress. Другими словами, очень простая установка без каких-либо вмешательств. Попробуйте это. Если вы не получите тот же результат, значит, где-то есть что-то, что портит URL. Есть фильтры retrieve_password_message и network_site_url, которые могут позволять какой-то функции фильтрации вызывать вашу проблему. Отключение плагинов и использование базовой темы без изменений должно помочь вам обнаружить, так ли это.

В конечном итоге, если вы не сможете отследить проблему, то переписывание всего содержимого сообщения в контексте фильтра retrieve_password_message даст вам обходной путь от любой проблемы. Фильтр ниже воспроизводит стандартное сообщение. Он включает потенциальное решение проблемы генерации URL, если что-то подключено к network_site_url. Если это так, используйте альтернативу и жестко укажите домен, как указано.

add_filter( 'retrieve_password_message', 'my_retrieve_password_message', 10, 4 );
function my_retrieve_password_message( $message, $key, $user_login, $user_data ) {

    // Начнем со стандартного содержимого.
    $site_name = wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES );
    $message = __( 'Кто-то запросил сброс пароля для следующей учетной записи:' ) . "\r\n\r\n";
    /* translators: %s: название сайта */
    $message .= sprintf( __( 'Название сайта: %s' ), $site_name ) . "\r\n\r\n";
    /* translators: %s: логин пользователя */
    $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";

    /*
     * Если проблема сохраняется с этим фильтром, удалите
     * последнюю строку выше и используйте строку ниже,
     * убрав "//" (что закомментирует её) и жестко
     * указав домен вашего сайта, избегая таким образом
     * использования функции network_site_url().
     */
    // $message .= '<http://вашсайт.com/wp-login.php?action=rp&key=' . $key . '&login=' . rawurlencode( $user_login ) . ">\r\n";

    // Возвращаем отфильтрованное сообщение.
    return $message;

}
12 дек. 2018 г. 22:00:17