Kullanıcı kaydı şifre e-postasını devre dışı bırak


13

Yani, WordPress 4.3 hepimizin bildiği gibi yeni bir şifre sistemine sahip. Ne yazık ki, bu yeni sistem yeni kullanıcılara E-posta göndermeme yeteneğini ortadan kaldırdı .

Müşterim, müşterilerine özel bir e-posta gönderdiği, e-postalarını manuel olarak kaydettiği ve daha sonra özel bir mesajla giriş bilgilerini içeren bir e-posta gönderdiği bir sistem kullanıyordu. Bu yeni sistemin daha güvenli olmaya çalıştığının farkındayız, ancak bu istediği kontrol için işe yaramıyor.

Bu e-postaları kapatmak için bir çözüm aramamda aşağıdaki kodu buldum, ancak bir kullanıcının e-postası daha önce kaydedilmiş kullanıcılar için DEĞİŞTİRİLDİ, sadece ilk oluşturulduğunda değil, bildirim e-postalarını kapattıklarını düşünüyorum:

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

Kayıttan sonra gönderilen bu ilk e-postaları kapatmanın herhangi bir yolunu bilen var mı?

Teşekkür ederim.


2
Bunu denedin mi? add_filter( 'user_registration_email', '__return_false');
Abhik

Yanıtlar:


9

phpmailer_initKancayı kullanarak gönderilmeden önce bu e-postayı engelleyebilirsiniz .

Varsayılan olarak, bu kanca herhangi bir e-posta gönderilmeden önce tetiklenir. Aşağıdaki işlevde $phpmailerbir PHPMailer örneği olacak ve varsayılan alıcıyı kaldırmak ve e-postayı gönderilmeden önce değiştirmek için yöntemlerini kullanabilirsiniz.

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

Bu kusursuz çalışıyor, sorunumu tamamen çözdü ve diğer kullanımlar için de mükemmel. Harika bir cevap için teşekkürler!
pattyd

3

Aslında yeni kullanıcıyı nasıl oluşturduğunuza bağlıdır. Eğer yönetim - Kullanıcılar - Yeni ekle Eğer bunu haklısın. Ne yazık ki, bildirim e-postasını göndermeyi devre dışı bırakamazsınız. Ancak, e-posta olmadan gerçekten yeni bir kullanıcı oluşturmak istiyorsanız, bir yol var.

wp_insert_userVarsayılan olarak herhangi bir e-posta göndermeyen işlev aracılığıyla kendiniz yeni bir hesap oluşturacağınız küçük bir eklenti oluşturabilirsiniz .

Bu işlev şu şekilde adlandırılabilir.

wp_insert_user( $userdata );

Nerede userdataparametresi tüm gerekli bilgileri geçebileceği bir dizidir.

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

Daha fazla bilgi için burada kodeksi kontrol edin .


Yani yeni bir kullanıcı oluşturulduğunda bu fonksiyon çağrılıyor mu?
Lisa Cerilli

3

wp_new_user_notificationKendi tanımlayarak geçersiz böylece fonksiyon, fişlidir. Tüm işlevi wp-includes/pluggable.phpeklentinize (veya functions.php) kopyalayabilmeli ve e-postayı gönderen satırı kaldırabilmelisiniz.


1
Tema işlevlerinden wp_new_user_notification değerini geçersiz kılamazsınız, çünkü takılabilir işlevler temadan önce yüklenir. Eklenti veya mu-eklentide geçersiz kılınmalıdır. Daha fazla bilgi için: wordpress.stackexchange.com/a/55966/56759
fandasson

1

Bunu temanızda çözmek için yeni bir dosya (ad size kalmış) oluşturarak yeni mu-eklenti oluşturun wp_new_user_notifications.phpve wp-content/mu-pluginsklasöre koyun . Böyle bir klasör yoksa bir klasör oluşturun. Php dosyasını herhangi bir alt klasöre değil, doğrudan klasöre koymayı unutmayın.

Simon'un önerdiği gibi devam edin - wp_new_user_notifications.phpyöntemi wp-includes/pluggable.phpyepyeni wp_new_user_notifications.phpdosyanıza kopyalayın ve gerekirse değiştirin.

Sorunuzu cevaplamak için: ilk şifre e-postalarını kapatmak için son wp_mailyöntem çağrısını kaldırmak yeterlidir .


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

İşler. Ancak eklentiye eklenmesi önemlidir, tema için function.php değil.

Sevmek.

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

  public function init_hooks() {
    add_filter('send_password_change_email', '__return_false');
  }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.