Отключение email с паролем при регистрации пользователя в WordPress

21 авг. 2015 г., 11:15:54
Просмотры: 17K
Голосов: 13

Как мы все знаем, в WordPress 4.3 появилась новая система паролей. К сожалению, в этой новой системе убрали возможность НЕ отправлять новым пользователям email с паролем.

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

В ходе поиска решения для отключения этих писем я нашел следующий код, но думаю, что он отключает только уведомления об изменении email для уже зарегистрированных пользователей, а не при первоначальной регистрации:

// Отключаем отправку email об изменении пароля
add_filter( 'send_password_change_email', '__return_false');
// Отключаем отправку email об изменении email
add_filter( 'send_email_change_email', '__return_false');

Кто-нибудь знает способ отключить эти первоначальные письма с паролем, отправляемые после регистрации?

Спасибо.

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

Пробовали ли вы это? add_filter( 'user_registration_email', '__return_false');

Abhik Abhik
23 авг. 2015 г. 08:06:47
Все ответы на вопрос 5
1
10

Вы можете перехватить это письмо до его отправки, используя хук phpmailer_init.

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

add_action('phpmailer_init', 'wse199274_intercept_registration_email');
function wse199274_intercept_registration_email($phpmailer){
    $admin_email = get_option( 'admin_email' );

    # Перехватываем письмо с логином и паролем, проверяя тему письма
    if( strpos($phpmailer->Subject, 'Your username and password info') ){
        # очищаем список получателей
        $phpmailer->ClearAllRecipients();
        # опционально, отправляем письмо на email администратора WordPress
        $phpmailer->AddAddress($admin_email);
    }else{
        # не перехвачено
    }
}
8 дек. 2015 г. 01:25:08
Комментарии

это работает безупречно, полностью решило мою проблему и идеально подходит для других случаев использования. Спасибо за отличный ответ!

pattyd pattyd
19 февр. 2017 г. 22:33:29
1

На самом деле это зависит от того, как вы создаете нового пользователя. Если вы делаете это через админку - Пользователи - Добавить нового, то вы правы. В версии 4.3, к сожалению, нельзя отключить отправку email-уведомления. Но если вам действительно нужно создать пользователя без отправки письма, есть способ.

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

Эту функцию можно вызвать следующим образом.

wp_insert_user( $userdata );

Где параметр userdata - это массив с необходимыми данными.

$userdata = array(
    'user_login'  =>  'login',
    'user_pass'   =>  'password',
);

$user_id = wp_insert_user( $userdata ) ;

//При успешном создании
if ( ! is_wp_error( $user_id ) ) {
    echo "Пользователь создан: ". $user_id;
}

Для получения дополнительной информации см. документацию.

21 авг. 2015 г. 19:41:51
Комментарии

Значит, эта функция вызывается каждый раз, когда создается новый пользователь, я правильно понимаю?

Lisa Lisa
23 авг. 2015 г. 07:55:08
1

Функция wp_new_user_notification является переопределяемой (pluggable), поэтому вы можете заменить её, определив свою собственную версию. Вы можете скопировать всю функцию из файла wp-includes/pluggable.php в ваш плагин (или в functions.php) и удалить строку, которая отправляет email.

25 авг. 2015 г. 14:12:06
Комментарии

Вы не можете переопределить функцию wp_new_user_notification в файле functions.php темы, потому что подключаемые функции загружаются раньше темы. Это нужно делать в плагине или mu-плагине. Подробнее: http://wordpress.stackexchange.com/a/55966/56759

fandasson fandasson
16 окт. 2015 г. 16:16:00
0

Чтобы решить эту задачу в вашей теме, создайте новый mu-плагин, создав файл wp_new_user_notifications.php (название может быть любым) и поместите его в папку wp-content/mu-plugins. Если такой папки нет, создайте её. Помните, что PHP-файл должен находиться непосредственно в этой папке, а не в какой-либо подпапке.

Затем следуйте рекомендациям Simon — скопируйте метод wp_new_user_notifications.php из файла wp-includes/pluggable.php в ваш новый файл wp_new_user_notifications.php и измените его по необходимости.

Отвечая на ваш вопрос: чтобы отключить начальные письма с паролями, достаточно удалить последний вызов метода wp_mail.

16 окт. 2015 г. 16:25:02
0
add_filter('send_password_change_email', '__return_false');

Работает. Но важно добавить это в сам плагин, а не в functions.php темы.

Например:

class ... {
  public function __construct() {
    ...
    $this->init_hooks();
  }

  public function init_hooks() {
    add_filter('send_password_change_email', '__return_false');
  }
}
30 янв. 2018 г. 16:54:53