如何阻止WordPress通过电子邮件发送密码

时间:2014-06-02 作者:Gareth Watson

我正在修改WP注册页面,以便捕获一些附加信息。除了捕获这些新信息,我还对其进行了修改,允许用户设置自己的密码。

一切都很好,用户创建的密码通过电子邮件发送给他们,可以用来访问网站。然而,紧接着是第二封带有系统生成密码的电子邮件。系统生成的密码实际上不起作用,我也不希望它起作用,但我想停止发送电子邮件。

I followed the guide here to get this far.

谢谢

add_action(\'user_register\', \'copper_user_register\', 10, 1);
function copper_user_register($user_id){

    // Save the password
    $userdata = array();

    $userdata[\'ID\'] = $user_id;
    if ( $_POST[\'password\'] !== \'\' ) {
        $userdata[\'user_pass\'] = $_POST[\'password\'];
    }

    $new_user_id = wp_update_user( $userdata );
    $plaintext_pass =   $_POST[\'password\'];
    wp_new_user_notification( $user_id, $plaintext_pass );

}

1 个回复
最合适的回答,由SO网友:birgire 整理而成

看起来你在打电话wp_new_user_notification() 显式地在代码段中。

以下是两个解决此问题的方法:

想法1:wp_new_user_notification() 该功能是可插拔的,所以您可以根据需要对其进行修改。

例如,您可以使用以下内容覆盖它:

if ( ! function_exists( \'wp_new_user_notification\' ) ):
function wp_new_user_notification( $user_id, $plaintext_pass = \'\' )
{
        $user = get_userdata( $user_id );

        // The blogname option is escaped with esc_html on the way into the database in sanitize_option
        // we want to reverse this for the plain text arena of emails.
        $blogname = wp_specialchars_decode(get_option(\'blogname\'), ENT_QUOTES);

        $message  = sprintf(__(\'New user registration on your site %s:\'), $blogname) . "\\r\\n\\r\\n";
        $message .= sprintf(__(\'Username: %s\'), $user->user_login) . "\\r\\n\\r\\n";
        $message .= sprintf(__(\'E-mail: %s\'), $user->user_email) . "\\r\\n";

        @wp_mail(get_option(\'admin_email\'), sprintf(__(\'[%s] New User Registration\'), $blogname), $message);  
}
endif;
它只会通知站点管理员,并在代码中使用此功能:

function wpse_new_user_notification( $user_id, $plaintext_pass = \'\' )
{
    if ( empty($plaintext_pass) )
        return;

    $user = get_userdata( $user_id );

    // The blogname option is escaped with esc_html on the way into the database in sanitize_option
    // we want to reverse this for the plain text arena of emails.
    $blogname = wp_specialchars_decode(get_option(\'blogname\'), ENT_QUOTES);

    $message  = sprintf(__(\'Username: %s\'), $user->user_login) . "\\r\\n";
    $message .= sprintf(__(\'Password: %s\'), $plaintext_pass) . "\\r\\n";
    $message .= wp_login_url() . "\\r\\n";

    wp_mail($user->user_email, sprintf(__(\'[%s] Your username and password\'), $blogname), $message);
}
它将只通知新注册的用户。

可能有更复杂的方法来处理这个问题,但这是我首先想到的;-)

想法2:

您也可以尝试使用wp_mail 过滤器和phpmailer_init 如果邮件正文包含“您的用户名和密码”以及$to 电子邮件地址不是管理员电子邮件地址。

结束

相关推荐