Отключить email-уведомления администратора о новых регистрациях пользователей
Как я могу отключить email-уведомления для пользователя и администратора при регистрации нового пользователя?
Я видел несколько предложений и плагинов, но ни одно из них не работает. Одно из предложений заключалось в использовании функции из одного из плагинов:
if ( !function_exists('wp_new_user_notification') ) :
/**
* Уведомление администратора блога о новом пользователе, обычно по email.
*
* @since 2.0
*
* @param int $user_id ID пользователя
* @param string $plaintext_pass Опционально. Пароль пользователя в открытом виде
*/
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);
// Опция blogname экранируется с помощью esc_html при сохранении в базу данных в sanitize_option
// нам нужно обратить это для простого текста в email.
$blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);
$message = sprintf(__('Новая регистрация пользователя на вашем сайте %s:'), $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] Новая регистрация пользователя'), $blogname), $message);
if ( empty($plaintext_pass) )
return;
$message = sprintf(__('Имя пользователя: %s'), $user_login) . "\r\n";
$message .= sprintf(__('Пароль: %s'), $plaintext_pass) . "\r\n";
$message .= wp_login_url() . "\r\n";
// wp_mail($user_email, sprintf(__('[%s] Ваше имя пользователя и пароль'), $blogname), $message)
}
endif;
Вопросы и предложения были довольно старыми, поэтому возможно WordPress 3.5 что-то переопределяет.
При регистрации я всё ещё получаю email администратору и email пользователю.
Я не хочу блокировать email для восстановления пароля.

Функция wp_new_user_notification
является переопределяемой (pluggable). Это означает, что вы можете переопределить её, объявив свою версию этой функции в вашем плагине/теме.
Итак, если вы хотите полностью отключить все уведомления, сделайте это следующим образом:
if ( !function_exists( 'wp_new_user_notification' ) ) :
function wp_new_user_notification( $user_id, $plaintext_pass = '' ) {
return;
}
endif;
Однако я не рекомендую отключать все уведомления, а советую отправлять уведомление хотя бы пользователю (Как иначе пользователь узнает свой пароль?). В этом случае ваш код должен выглядеть так:
if ( !function_exists( 'wp_new_user_notification' ) ) :
function wp_new_user_notification( $user_id, $plaintext_pass = '' ) {
$user = get_userdata( $user_id );
$user_login = stripslashes($user->user_login);
$user_email = stripslashes($user->user_email);
$blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);
if ( empty($plaintext_pass) ) {
return;
}
$message = sprintf(__('Имя пользователя: %s'), $user_login) . "\r\n";
$message .= sprintf(__('Пароль: %s'), $plaintext_pass) . "\r\n";
$message .= wp_login_url() . "\r\n";
wp_mail($user_email, sprintf(__('[%s] Ваше имя пользователя и пароль'), $blogname), $message);
}
endif;

+1 @Rob ... как пользователь получит пароль, если отключить уведомление? Очень хорошее замечание от Eugene Manuilov.

@s_ha_dum У меня есть фронтенд-регистрация через gravity forms, которая отправляет письмо отдельно. Но заблокирует ли это письмо о восстановлении пароля?

@EugeneManuilov Я только что попробовал первый блок кода, но письма все равно приходят.

Согласно этой странице, будет достаточно использовать следующий код (чтобы полностью отключить все уведомления):
if ( !function_exists('wp_new_user_notification') ) {
function wp_new_user_notification( ) {}
}
Это довольно близко к приведенному ответу, но немного короче. Решил поделиться на случай, если это будет полезно.

Начиная с версии 4.6 появился параметр для отключения уведомлений администратора. https://developer.wordpress.org/reference/functions/wp_new_user_notification/
- @since 4.6.0 Параметр
$notify
принимает значение 'user' для отправки уведомления только созданному пользователю. - @param string $notify Опционально. Тип отправляемого уведомления. Допустимые значения: 'admin' или пустая строка (только админ), 'user', или 'both' (админ и пользователь). По умолчанию пустая строка. */
- function wp_new_user_notification( $user_id, $deprecated = null, $notify = 'user' )

Пришлось сделать это сегодня, и обнаружил, что многие из предложенных решений уже устарели. Этот способ выглядит лучше, без перезаписи подключаемых функций. Это не точный мой код, но он послужит хорошим примером.
add_action( 'register_post', 'maybe_stop_notifications', 10, 3 );
function maybe_stop_notifications ( $sanitized_user_login, $user_email, $errors ) {
if( empty( $errors->get_error_code() )) {
remove_action( 'register_new_user', 'wp_send_new_user_notifications' );
}
}
