Отключить email-уведомления администратора о новых регистрациях пользователей

11 мар. 2013 г., 12:38:13
Просмотры: 14.3K
Голосов: 3

Как я могу отключить 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 для восстановления пароля.

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

Есть ли доступный устанавливаемый плагин с такой же функциональностью?

orschiro orschiro
30 мая 2016 г. 08:15:07

@orschiro Вот он - https://wordpress.org/plugins/disable-new-user-notifications/

Paras Shah Paras Shah
2 дек. 2016 г. 08:03:23
Все ответы на вопрос 4
4

Функция 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;
11 мар. 2013 г. 13:03:12
Комментарии

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

s_ha_dum s_ha_dum
11 мар. 2013 г. 16:08:41

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

Rob Rob
11 мар. 2013 г. 16:14:39

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

Rob Rob
11 мар. 2013 г. 16:17:07

@Rob покажи нам свой код

Eugene Manuilov Eugene Manuilov
11 мар. 2013 г. 16:49:11
0

Согласно этой странице, будет достаточно использовать следующий код (чтобы полностью отключить все уведомления):

if ( !function_exists('wp_new_user_notification') ) {    
  function wp_new_user_notification( ) {}    
}

Это довольно близко к приведенному ответу, но немного короче. Решил поделиться на случай, если это будет полезно.

2 июн. 2015 г. 14:18:58
0

Начиная с версии 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' )
10 февр. 2017 г. 21:49:56
0

Пришлось сделать это сегодня, и обнаружил, что многие из предложенных решений уже устарели. Этот способ выглядит лучше, без перезаписи подключаемых функций. Это не точный мой код, но он послужит хорошим примером.

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' );

  }
} 
4 мая 2017 г. 18:57:36