WordPress邮件的那些事儿

前言

WordPress自带新用户注册通知/密码修改通知/重置密码通知/评论批准/评论回复通知,但是!不得不说text形式的通知略丑。。。所以,这里我提供一些修改思路(仅限发送给用户的通知,而不是管理员)。

新用户注册通知/密码修改通知

新用户注册通知:WP默认是发送一个设置密码的链接,其中重要的参数是$key,但是参考云落的方法,无法直接获取这一参数。
所以我改用了随机密码模式,先随机生成一个密码,再发送邮件。

add_action('user_register','kratos_pwd_register_mail',101);
add_filter('wp_new_user_notification_email','__return_false');
function kratos_pwd_register_mail($user_id){
    $user = get_user_by('id',$user_id);
    $blogname = get_option('blogname');
    $pwd = wp_generate_password(10,false);
    $user->user_pass = $pwd;
    $new_user_id = wp_update_user($user);
    $message = '<div class="emailcontent" style="width:100%;max-width:720px;text-align:left;margin:0 auto;padding-top:80px;padding-bottom:20px"><div class="emailtitle"><h1 style="color:#fff;background:#51a0e3;line-height:70px;font-size:24px;font-weight:400;padding-left:40px;margin:0">注册成功通知</h1><div class="emailtext" style="background:#fff;padding:20px 32px 20px"><div style="padding:0;font-weight:700;color:#6e6e6e;font-size:16px">尊敬的'.$user->user_login.',您好!</div><p style="color:#6e6e6e;font-size:13px;line-height:24px">欢迎您注册['.$blogname.'],请使用下面的信息登录并修改密码!</p><table cellpadding="0" cellspacing="0" border="0" style="width:100%;border-top:1px solid #eee;border-left:1px solid #eee;color:#6e6e6e;font-size:16px;font-weight:normal"><thead><tr><th colspan="2" style="padding:10px 0;border-right:1px solid #eee;border-bottom:1px solid #eee;text-align:center;background:#f8f8f8">您的注册信息</th></tr></thead><tbody><tr><td style="padding:10px 0;border-right:1px solid #eee;border-bottom:1px solid #eee;text-align:center;width:100px">用户名</td><td style="padding:10px 20px 10px 30px;border-right:1px solid #eee;border-bottom:1px solid #eee;line-height:30px">'.$user->user_login.'</td></tr><tr><td style="padding:10px 0;border-right:1px solid #eee;border-bottom:1px solid #eee;text-align:center;width:100px">登录邮箱</td><td style="padding:10px 20px 10px 30px;border-right:1px solid #eee;border-bottom:1px solid #eee;line-height:30px">'.$user->user_email.'</td></tr><tr><td style="padding:10px 0;border-right:1px solid #eee;border-bottom:1px solid #eee;text-align:center">临时密码</td><td style="padding:10px 20px 10px 30px;border-right:1px solid #eee;border-bottom:1px solid #eee;line-height:30px">'.$pwd.'</td></tr><tr><td style="padding:10px 0;border-right:1px solid #eee;border-bottom:1px solid #eee;text-align:center;width:100px">登录地址</td><td style="padding:10px 20px 10px 30px;border-right:1px solid #eee;border-bottom:1px solid #eee;line-height:30px"><a href="'.wp_login_url().'">单击访问</a></td></tr></tbody></table><p style="color:#6e6e6e;font-size:13px;line-height:24px">如果您的账号有异常,请您在第一时间和我们取得联系哦,联系邮箱:'.get_bloginfo('admin_email').'</p></div></div></div>';
    $headers = "Content-Type:text/html;charset=UTF-8\n";
    wp_mail($user->user_email,'['.$blogname.']欢迎注册',$message,$headers);
}

由于是直接更新了密码,所以我们顺便关闭了密码修改邮件通知:

add_filter('password_change_email','__return_false');

当然,如果允许了用户自定义密码注册,那就方便多了,密码直接取$_POST['password']即可。

重置密码通知

这部分修改网络上也有诸多提及,但是,基本都是针对“密码重设链接无效”问题做的更改,并没有实现美化。
所以我使用HTML写了一下:

$msg = '<div class="emailcontent" style="width:100%;max-width:720px;text-align:left;margin:0 auto;padding-top:80px;padding-bottom:20px"><div class="emailtitle"><h1 style="color:#fff;background:#51a0e3;line-height:70px;font-size:24px;font-weight:400;padding-left:40px;margin:0">密码重设通知</h1><div class="emailtext" style="background:#fff;padding:20px 32px 20px"><div style="padding:0;font-weight:700;color:#6e6e6e;font-size:16px">尊敬的'.$user_data->display_name.',您好!</div><p style="color:#6e6e6e;font-size:13px;line-height:24px">有人要求重设您在['.get_option('blogname').']的密码,若不是您本人请求,请忽略本邮件。</p><table cellpadding="0" cellspacing="0" border="0" style="width:100%;border-top:1px solid #eee;border-left:1px solid #eee;color:#6e6e6e;font-size:16px;font-weight:normal"><thead><tr><th colspan="2" style="padding:10px 0;border-right:1px solid #eee;border-bottom:1px solid #eee;text-align:center;background:#f8f8f8">密码重设信息</th></tr></thead><tbody><tr><td style="padding:10px 0;border-right:1px solid #eee;border-bottom:1px solid #eee;text-align:center;width:100px">用户名</td><td style="padding:10px 20px 10px 30px;border-right:1px solid #eee;border-bottom:1px solid #eee;line-height:30px">'.$user_data->user_login.'</td></tr><tr><td style="padding:10px 0;border-right:1px solid #eee;border-bottom:1px solid #eee;text-align:center;width:100px">登录邮箱</td><td style="padding:10px 20px 10px 30px;border-right:1px solid #eee;border-bottom:1px solid #eee;line-height:30px">'.$user_data->user_email.'</td></tr><tr><td style="padding:10px 0;border-right:1px solid #eee;border-bottom:1px solid #eee;text-align:center">密码重设地址</td><td style="padding:10px 20px 10px 30px;border-right:1px solid #eee;border-bottom:1px solid #eee;line-height:30px"><a href="'.network_site_url("wp-login.php?action=rp&key=$key&login=".rawurlencode($user_data->user_login),'login').'">单击访问</a></td></tr></tbody></table><p style="color:#6e6e6e;font-size:13px;line-height:24px">如果您的账号有异常,请您在第一时间和我们取得联系哦,联系邮箱:'.get_bloginfo('admin_email').'</p></div></div></div>';

WP提供的钩子是retrieve_password_message,似乎不能设置Content-Type为text/html,所以收到的邮件就是。。。。emmm...
那么我就想,能不能针对WP_Mail应用这个设置呢?所以我尝试使用了下面这句:

add_filter('wp_mail_content_type',create_function('','return "text/html";'));

没错,实现了我要的效果,但是包括管理员邮件通知在内的所有邮件都使用了这个设置,一些通知没有换行惨不忍睹。
所以最终我只对retrieve_password_message应用了这一filter:

//Reset pwd mail
add_filter('retrieve_password_message','kratos_reset_password_message',null,2);
function kratos_reset_password_message($message,$key){
    add_filter('wp_mail_content_type',create_function('','return "text/html";'));
    if(strpos($_POST['user_login'],'@')){
        $user_data = get_user_by('email',trim($_POST['user_login']));
    }else{
        $login = trim($_POST['user_login']);
        $user_data = get_user_by('login',$login);
    }
    $msg = '<div class="emailcontent" style="width:100%;max-width:720px;text-align:left;margin:0 auto;padding-top:80px;padding-bottom:20px"><div class="emailtitle"><h1 style="color:#fff;background:#51a0e3;line-height:70px;font-size:24px;font-weight:400;padding-left:40px;margin:0">密码重设通知</h1><div class="emailtext" style="background:#fff;padding:20px 32px 20px"><div style="padding:0;font-weight:700;color:#6e6e6e;font-size:16px">尊敬的'.$user_data->display_name.',您好!</div><p style="color:#6e6e6e;font-size:13px;line-height:24px">有人要求重设您在['.get_option('blogname').']的密码,若不是您本人请求,请忽略本邮件。</p><table cellpadding="0" cellspacing="0" border="0" style="width:100%;border-top:1px solid #eee;border-left:1px solid #eee;color:#6e6e6e;font-size:16px;font-weight:normal"><thead><tr><th colspan="2" style="padding:10px 0;border-right:1px solid #eee;border-bottom:1px solid #eee;text-align:center;background:#f8f8f8">密码重设信息</th></tr></thead><tbody><tr><td style="padding:10px 0;border-right:1px solid #eee;border-bottom:1px solid #eee;text-align:center;width:100px">用户名</td><td style="padding:10px 20px 10px 30px;border-right:1px solid #eee;border-bottom:1px solid #eee;line-height:30px">'.$user_data->user_login.'</td></tr><tr><td style="padding:10px 0;border-right:1px solid #eee;border-bottom:1px solid #eee;text-align:center;width:100px">登录邮箱</td><td style="padding:10px 20px 10px 30px;border-right:1px solid #eee;border-bottom:1px solid #eee;line-height:30px">'.$user_data->user_email.'</td></tr><tr><td style="padding:10px 0;border-right:1px solid #eee;border-bottom:1px solid #eee;text-align:center">密码重设地址</td><td style="padding:10px 20px 10px 30px;border-right:1px solid #eee;border-bottom:1px solid #eee;line-height:30px"><a href="'.network_site_url("wp-login.php?action=rp&key=$key&login=".rawurlencode($user_data->user_login),'login').'">单击访问</a></td></tr></tbody></table><p style="color:#6e6e6e;font-size:13px;line-height:24px">如果您的账号有异常,请您在第一时间和我们取得联系哦,联系邮箱:'.get_bloginfo('admin_email').'</p></div></div></div>';
    return $msg;
}

完美!

评论批准/评论回复通知

这部分,网络上有很多模板,我这里就不写了。

推广

不行,我还是要强推一波Kratos(M)主题!就是本站现在使用的主题,已包含了上述所有功能,可选是否允许用户自定义密码注册!

注册页效果图:

了解更多:https://www.fczbl.vip/787.html

项目地址: https://github.com/xb2016/Kratos-pjax

参考

https://googlo.me/archives/6187.html

点赞
  1. 鸟叔说道:
    Google Chrome Windows 7

    我用的也是他的主题

  2. 明月登楼说道:
    Firefox Windows 10

    不错,过来看看先!博主的主题很赞!很潮呀!

    1. 小白-白说道:
      Firefox Windows 10

      整合了一堆功能2333

  3. Flyer说道:
    Safari iPhone iOS 11.2.6

    这个可以有

  4. Xinger说道:
    Google Chrome Windows 7

    舔舔大佬~ :guai:

    1. 小白-白说道:
      Google Chrome Android 7.0

      我觉得布星.jpg

      1. Xinger说道:
        Google Chrome Windows 7

        :huaji10:

  5. wzy说道:
    Google Chrome Android 7.0

    老哥,可否指点下去哪里找邮件发送服务器(在网站服务商不提供的情况下)?

  6. Lengsir说道:
    Google Chrome Windows 10

    密码重设链接无效的原因是最后面的一个反尖括号(>)被当成链接内容了。

    1. 小白-白说道:
      Firefox Windows 10

      我知道啊...

发表评论

电子邮件地址不会被公开。必填项已用 * 标注