注册新用户后,WP会发送一封包含登录名/密码和链接到登录页面的电子邮件。

是否可以更改此默认电子邮件模板?我还想更改主题和发件人。

编辑:对于任何感兴趣的人,这里有一个插件解决方案。

#1 楼

使用wp_new_user_notification()功能发送新的用户电子邮件。该函数是可插拔的,这意味着您可以覆盖它:

// Redefine user notification function
if ( !function_exists('wp_new_user_notification') ) {
    function wp_new_user_notification( $user_id, $plaintext_pass = '' ) {
        $user = new WP_User($user_id);

        $user_login = stripslashes($user->user_login);
        $user_email = stripslashes($user->user_email);

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

        @wp_mail(get_option('admin_email'), sprintf(__('[%s] New User Registration'), get_option('blogname')), $message);

        if ( empty($plaintext_pass) )
            return;

        $message  = __('Hi there,') . "\r\n\r\n";
        $message .= sprintf(__("Welcome to %s! Here's how to log in:"), get_option('blogname')) . "\r\n\r\n";
        $message .= wp_login_url() . "\r\n";
        $message .= sprintf(__('Username: %s'), $user_login) . "\r\n";
        $message .= sprintf(__('Password: %s'), $plaintext_pass) . "\r\n\r\n";
        $message .= sprintf(__('If you have any problems, please contact me at %s.'), get_option('admin_email')) . "\r\n\r\n";
        $message .= __('Adios!');

        wp_mail($user_email, sprintf(__('[%s] Your username and password'), get_option('blogname')), $message);

    }
}


注意:不能在主题functions.php文件中完成覆盖可插拔函数。那时WP的可插入文件已经加载,因此该功能将由WP定义(即默认值)。必须先加载自定义版本,然后才能加载,这意味着您必须将其加载到自定义插件文件中。

评论


@Bainternet我似乎无法正常工作,我已将其添加到我的功能文件中,但是标准电子邮件一直在发送。我在多站点上,但这没关系吧?

–user2015
2011年7月2日,下午2:33

现在就可以了,它似乎只能作为单独的插件工作,而不能将其添加到functions.php文件中。现在它可以完美地工作了,再次感谢您提供的出色代码!

–user2015
2011年7月2日,下午3:03

它也适用于多站点吗?我可以看到多站点在ms-functions.php中具有一堆用于发送通知电子邮件的功能。

–西西尔
13年7月28日在7:42



我认为多站点使用wpmu_signup_user_notification。

–维克
2014年11月25日在21:43

这个答案已经有好几年了。接受的答案对我不起作用。 (将其添加到functions.php中与新用户注册时发送的任何电子邮件没有任何区别。)我是否应该发布一个新问题?

–基特·约翰逊(Kit Johnson)
2015年4月21日在11:23

#2 楼

对于2018年及之后的用户:

自WordPress 4.9.0起,您可以使用新的过滤器(不再需要插件):



wp_new_user_notification_email-定制发送给User
的电子邮件

wp_new_user_notification_email_admin-定制发送给Admin的电子邮件

发送给Admin的电子邮件的示例(您可以将其粘贴到主题的功能中。 php):

add_filter( 'wp_new_user_notification_email_admin', 'custom_wp_new_user_notification_email', 10, 3 );

function custom_wp_new_user_notification_email( $wp_new_user_notification_email, $user, $blogname ) {
    $wp_new_user_notification_email['subject'] = sprintf( '[%s] New user %s registered.', $blogname, $user->user_login );
    $wp_new_user_notification_email['message'] = sprintf( "%s ( %s ) has registerd to your blog %s.", $user->user_login, $user->user_email, $blogname );
    return $wp_new_user_notification_email;
}


评论


或者,可以使用wp_new_user_notification_email和wp_new_user_notification_email_admin过滤器。有兴趣的人可以查看wp_new_user_notification()的完整文档和源代码。

– Pete
18年1月10日在3:42



谢谢Pete,它看起来像是4.9.0中引入的,看起来是一个更好的解决方案。

– Edu Wass
18年1月10日在12:24

你好我也在使用WP Approve User插件。目前,他们在注册时会发送标准电子邮件。不应该。应该说必须先批准帐户。我们批准用户可以选择设置帐户批准时间和工作时间的文本。这是之前的预批准步骤。我会使用您提到的这些新过滤器吗?

–安德鲁·特拉克(Andrew Truckle)
19/12/8在8:32

#3 楼

这不适用于functions.php。您需要将此代码放在插件中。

如果您现在不打算为此创建插件,请使用此链接。

别忘了使用在此更新此功能表的代码。

评论


只是基于对wp_new_user_notification()函数添加过滤器钩子的澄清。此答案专门引用了wp_new_user_notification()的重写作为可插入函数。但是,这不适用于使用wp_new_user_notification_email和wp_new_user_notification_email_admin过滤器。这些可以在您的functions.php文件(或特定于站点的插件)中使用。

– Butlerblog
19/12/9在13:24