Вимкнути електронний лист із паролем реєстрації користувача


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
    }
}

це працює бездоганно, повністю вирішило мою проблему і ідеально підходить і для інших цілей. Дякую за чудову відповідь!
pattyd

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

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


Отже, ця функція викликається щоразу, коли створюється новий користувач, я припускаю?
Ліза Черіллі

3

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


1
Ви не можете перевизначити wp_new_user_notification у темі function.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виклик методу.


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

Працює. Але важливо, щоб його додали до плагіна він сам, а не функції.php для теми.

Подобається.

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

  public function init_hooks() {
    add_filter('send_password_change_email', '__return_false');
  }
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.