Отключение email с паролем при регистрации пользователя в WordPress
Как мы все знаем, в 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');
Кто-нибудь знает способ отключить эти первоначальные письма с паролем, отправляемые после регистрации?
Спасибо.
Вы можете перехватить это письмо до его отправки, используя хук 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{
# не перехвачено
}
}

На самом деле это зависит от того, как вы создаете нового пользователя. Если вы делаете это через админку - Пользователи - Добавить нового, то вы правы. В версии 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;
}
Для получения дополнительной информации см. документацию.

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

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

Чтобы решить эту задачу в вашей теме, создайте новый 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
.

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