問題描述

所以,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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。