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

21 апр. 2011 г., 13:24:09
Просмотры: 155K
Голосов: 64

После регистрации нового пользователя WordPress отправляет email с логином/паролем и ссылкой на страницу входа.

Есть ли способ изменить этот стандартный шаблон письма? Я также хотел бы изменить тему письма и отправителя.

Редактировать: Для заинтересованных, здесь есть решение с помощью плагина.

0
Все ответы на вопрос 3
8
69

Письмо для нового пользователя отправляется с помощью функции wp_new_user_notification(). Эта функция является заменяемой (pluggable), что означает, что вы можете переопределить её:

// Переопределяем функцию уведомления пользователя
if ( !function_exists('wp_new_user_notification') ) {
    function wp_new_user_notification( $user_id, $plaintext_pass = '' ) {
        $user = new WP_User($user_id);

        $user_login = stripslashes($user->user_login);
        $user_email = stripslashes($user->user_email);

        $message  = sprintf(__('Новая регистрация пользователя на вашем блоге %s:'), get_option('blogname')) . "\r\n\r\n";
        $message .= sprintf(__('Имя пользователя: %s'), $user_login) . "\r\n\r\n";
        $message .= sprintf(__('E-mail: %s'), $user_email) . "\r\n";

        @wp_mail(get_option('admin_email'), sprintf(__('[%s] Новая регистрация пользователя'), get_option('blogname')), $message);

        if ( empty($plaintext_pass) )
            return;

        $message  = __('Привет,') . "\r\n\r\n";
        $message .= sprintf(__("Добро пожаловать на %s! Вот как вы можете войти:"), get_option('blogname')) . "\r\n\r\n";
        $message .= wp_login_url() . "\r\n";
        $message .= sprintf(__('Имя пользователя: %s'), $user_login) . "\r\n";
        $message .= sprintf(__('Пароль: %s'), $plaintext_pass) . "\r\n\r\n";
        $message .= sprintf(__('Если у вас возникнут проблемы, пожалуйста, свяжитесь со мной по адресу %s.'), get_option('admin_email')) . "\r\n\r\n";
        $message .= __('До свидания!');

        wp_mail($user_email, sprintf(__('[%s] Ваше имя пользователя и пароль'), get_option('blogname')), $message);

    }
}

Примечание: Переопределение заменяемых функций невозможно в файле functions.php темы. К этому моменту заменяемый файл WordPress уже загружен, и функция будет определена WordPress (т.е. версия по умолчанию). Ваша кастомная версия должна загружаться раньше, что означает, что её необходимо разместить в файле пользовательского плагина.

21 апр. 2011 г. 16:15:39
Комментарии

@Bainternet У меня не получается заставить это работать. Я добавил этот код в файл functions.php, но стандартное письмо продолжает отправляться. У меня мультисайт, но это не должно иметь значения, верно?

User User
2 июл. 2011 г. 05:33:33

Теперь всё работает! Оказывается, код работает только как отдельный плагин, а не при добавлении в файл functions.php. Теперь всё идеально, ещё раз спасибо за этот отличный код!

User User
2 июл. 2011 г. 06:03:20

Работает ли это для мультисайта? Я вижу, что в мультисайте есть куча функций в ms-functions.php для отправки уведомлений по email.

Sisir Sisir
28 июл. 2013 г. 10:42:31

Я думаю, в мультисайте используется wpmu_signup_user_notification.

Wyck Wyck
25 нояб. 2014 г. 23:43:53

Этот ответ уже несколько лет. Принятый ответ не работает у меня. (Добавление его в functions.php не влияет ни на одно из писем, отправляемых при регистрации нового пользователя.) Следует ли мне задать новый вопрос?

Kit Johnson Kit Johnson
21 апр. 2015 г. 14:23:51

В итоге я нашел рабочий код в этом руководстве: http://www.webtipblog.com/change-wordpress-user-registration-welcome-email/

Kit Johnson Kit Johnson
24 апр. 2015 г. 09:06:07

Относительно комментариев о том, что это не работает в functions.php, это происходит потому, что вы не можете загрузить пользовательскую версию pluggable-функции так поздно. Это не связано с тем, что ответ старый. Вы должны определить свою пользовательскую функцию до того, как будет загружена версия WP. При загрузке в functions.php версия плагина по умолчанию уже определена. Её нужно загружать как плагин (нет разницы между данным ответом и ссылкой, которую привёл Kit, кроме дополнительного шага загрузки в качестве плагина).

butlerblog butlerblog
9 дек. 2019 г. 15:37:49

Не работает в 2021 году, WP 5.6

trainoasis trainoasis
11 мая 2021 г. 17:16:53
Показать остальные 3 комментариев
4
39

Для пользователей с 2018 года и новее:

Начиная с WordPress 4.9.0 доступны новые фильтры для этого (больше не нужен плагин):

Пример использования для письма администратору (можно добавить в файл functions.php вашей темы):

add_filter( 'wp_new_user_notification_email_admin', 'custom_wp_new_user_notification_email', 10, 3 );

function custom_wp_new_user_notification_email( $wp_new_user_notification_email, $user, $blogname ) {
    $wp_new_user_notification_email['subject'] = sprintf( '[%s] Новый пользователь %s зарегистрирован.', $blogname, $user->user_login );
    $wp_new_user_notification_email['message'] = sprintf( "%s ( %s ) зарегистрировался в вашем блоге %s.", $user->user_login, $user->user_email, $blogname );
    return $wp_new_user_notification_email;
}
3 янв. 2018 г. 13:54:38
Комментарии

Альтернативно можно использовать фильтры wp_new_user_notification_email и wp_new_user_notification_email_admin. Желающие могут ознакомиться с полной документацией и исходным кодом для wp_new_user_notification().

Pete Pete
10 янв. 2018 г. 05:42:22

Спасибо, Пит, похоже это было добавлено в версии 4.9.0 и выглядит как более удачное решение.

Edu Wass Edu Wass
10 янв. 2018 г. 14:24:25

Привет. Я тоже использую плагин WP Approve User.

На данный момент он отправляет стандартное письмо при регистрации. Но этого быть не должно. Вместо этого должно быть сообщение, что аккаунт сначала нужно подтвердить.

Плагин We Approve User имеет опцию для настройки текста, когда аккаунт подтверждён, и это работает правильно. Но нужно изменить шаг перед подтверждением.

Мне нужно использовать эти новые фильтры, о которых вы упомянули?

Andrew Truckle Andrew Truckle
8 дек. 2019 г. 10:32:51

Фильтр custom_wp_new_user_notification_email не изменяет содержимое email для администратора в WordPress 5.6

trainoasis trainoasis
11 мая 2021 г. 17:16:00
1

Это не будет работать в functions.php. Вам нужно поместить этот код в плагин.

Если вы не знаете, как создать плагин для этого, просто используйте эту ссылку.

Не забудьте взять обновленный код этой функции здесь.

17 сент. 2015 г. 16:45:29
Комментарии

Просто уточнение на основе добавления фильтров к функции wp_new_user_notification(). Этот ответ конкретно ссылается на переопределение wp_new_user_notification() как pluggable-функции. Однако это не относится к использованию фильтров wp_new_user_notification_email и wp_new_user_notification_email_admin. Их можно использовать в файле functions.php (или в специальном плагине для сайта).

butlerblog butlerblog
9 дек. 2019 г. 15:24:34