Отключить регистрационный пароль пользователя по электронной почте

13

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

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

Я нашел следующий код в своем поиске решения для отключения этих электронных писем, но я думаю, что они отключают уведомления только в том случае, если электронная почта пользователя ИЗМЕНЕНА для ранее зарегистрированных пользователей, а не при ее создании:

add_filter( 'send_password_change_email', '__return_false');
add_filter( 'send_email_change_email', '__return_false');

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

Спасибо.

Лиза Черилли
источник
2
Вы пробовали это? add_filter( 'user_registration_email', '__return_false');
Абхик

Ответы:

9

Вы можете перехватить это письмо, прежде чем оно будет отправлено с помощью phpmailer_initхука.

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

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

    # Intercept username and password email by checking subject line
    if( strpos($phpmailer->Subject, 'Your username and password info') ){
        # clear the recipient list
        $phpmailer->ClearAllRecipients();
        # optionally, send the email to the WordPress admin email
        $phpmailer->AddAddress($admin_email);
    }else{
        #not intercepted
    }
}
sxalexander
источник
это работает безупречно, полностью решило мою проблему и идеально подходит для других целей. Спасибо за отличный ответ!
Паттид
3

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

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

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

wp_insert_user( $userdata );

Где userdataпараметр является массивом, где вы можете передать всю необходимую информацию.

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

$user_id = wp_insert_user( $userdata ) ;

//On success
if ( ! is_wp_error( $user_id ) ) {
    echo "User created : ". $user_id;
}

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

Emetrop
источник
Так что эта функция вызывается всякий раз, когда создается новый пользователь, я полагаю?
Лиза Черилли
3

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

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

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

Затем продолжите, как предложил Саймон, - скопируйте wp_new_user_notifications.phpметод из wp-includes/pluggable.phpвашего нового wp_new_user_notifications.phpфайла и измените, если необходимо.

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

fandasson
источник
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');
  }
}
Филипп
источник