问题描述

所以,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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。