Как изменить стандартное письмо при регистрации? (с плагином и/или без плагина)
После регистрации нового пользователя WordPress отправляет email с логином/паролем и ссылкой на страницу входа.
Есть ли способ изменить этот стандартный шаблон письма? Я также хотел бы изменить тему письма и отправителя.
Редактировать: Для заинтересованных, здесь есть решение с помощью плагина.
Письмо для нового пользователя отправляется с помощью функции 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 (т.е. версия по умолчанию). Ваша кастомная версия должна загружаться раньше, что означает, что её необходимо разместить в файле пользовательского плагина.

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

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

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

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

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

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

Для пользователей с 2018 года и новее:
Начиная с WordPress 4.9.0 доступны новые фильтры для этого (больше не нужен плагин):
- wp_new_user_notification_email — настройка письма, отправляемого пользователю
- wp_new_user_notification_email_admin — настройка письма, отправляемого администратору
Пример использования для письма администратору (можно добавить в файл 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;
}

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

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

Привет. Я тоже использую плагин WP Approve User.
На данный момент он отправляет стандартное письмо при регистрации. Но этого быть не должно. Вместо этого должно быть сообщение, что аккаунт сначала нужно подтвердить.
Плагин We Approve User имеет опцию для настройки текста, когда аккаунт подтверждён, и это работает правильно. Но нужно изменить шаг перед подтверждением.
Мне нужно использовать эти новые фильтры, о которых вы упомянули?

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