問題描述

所以,WordPress 4.3 有一個新的密碼系統,我們都知道。不幸的是,這個新系統已經消除了不能向新使用者傳送電子郵件的能力。

我的客戶端正在使用一個系統,他向客戶傳送了一個自定義的電子郵件,手動註冊了他們的電子郵件,然後透過一個自定義訊息向登入資訊傳送了一封電子郵件。我們知道這個新系統正在試圖更安全,但是這並不適合他想要的控制量。

我在尋找一個解決方案來找到以下程式碼來關閉這些電子郵件,但是我認為只有當使用者的電子郵件被更改為以前註冊的使用者時才會關閉通知電子郵件,而不是首次建立時:

add_filter( 'send_password_change_email', '__return_false');
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' );

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

次佳解決方案

其實這取決於你如何建立新的使用者。如果你從管理這樣做 – 使用者 – 新增新的你是對的。 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;
}

欲瞭解更多資訊,請檢查抄送 here

第三種解決方案

wp_new_user_notification 功能是可插拔的,因此您可以透過定義自己的方式來覆蓋它。您應該能夠將整個功能從 wp-includes/pluggable.php 複製到外掛 (或 functions.php) 中,並刪除傳送電子郵件的行。

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。