记录一些常用的函数和瞎折腾的过程……

升级版:wordpress回复任意评论后自动发邮件通知

提醒:本文最后更新于 1721 天前,文中所描述的信息可能已发生改变,请谨慎使用。

在wordpress中,回复了某位评论者后,想要邮件通知,有很多插件可以用。但你若懂点代码的话,用两段函数也是很方便的。前面我整理过一次,但那段函数只能是管理员回复才会邮件通知,并且不支持嵌套和@用户方式,这次在网上搜罗了一番,找到一个函数,给任意父级评论回复了留言,均可给父级评论的邮件发邮件通知,即:支持嵌套和@用户方式。

具体代码如下:

function comment_mail_notify($comment_id) {
  $comment = get_comment($comment_id);     //依据id获取这条评论相关数据
  $content=$comment->comment_content;      //对评论内容进行匹配
  $match_count=preg_match_all('/<a href="#comment-([0-9]+)?" rel="nofollow">/si',$content,$matchs);
  if($match_count>0){ //假设匹配到了
    foreach($matchs[1] as $parent_id){ //对每一个子匹配都进行邮件发送操作
    SimPaled_send_email($parent_id,$comment);
  }}elseif($comment->comment_parent!='0'){ //以防万一有人有意删了@回复,还能够通过查找父级评论id来确定邮件发送对象
    $parent_id=$comment->comment_parent;
    SimPaled_send_email($parent_id,$comment);
  }else return;
}
add_action('comment_post', 'comment_mail_notify');
function SimPaled_send_email($parent_id,$comment){ //发送邮件的函数
  $admin_email = get_bloginfo ('admin_email'); //管理员邮箱
  $parent_comment=get_comment($parent_id); //获取被回复人(或叫父级评论)相关信息
  $author_email=$comment->comment_author_email; //评论人邮箱
  $to = trim($parent_comment->comment_author_email);//被回复人邮箱
  $spam_confirmed = $comment->comment_approved;
  if ($spam_confirmed != 'spam' && $to != $admin_email && $to != $author_email) { //垃圾评论、管理员和作者邮箱不发送邮件通知
  $wp_email = 'no-reply@' . preg_replace('#^www\.#', '', strtolower($_SERVER['SERVER_NAME'])); // 发件人email,可直接修改为自己的邮箱。
  $subject = '您在 [' . get_option("blogname") . '] 的留言有了新回复';
  $message = '
    <div id="contentDiv" style="position: relative;font-size:14px;height:auto;padding:15px 15px 10px 15px;*padding:15px 15px 0 15px;overflow:visible;min-height:100px;_height:100px;" class=" body">
      <div id="mailContentContainer" style="font-size: 14px; padding: 0px; height: auto; min-height: auto; font-family: &quot;lucida Grande&quot;,Verdana; position: relative; margin-right: 0px;">
        <div style="background-color:white;border-top:2px solid #12ADDB;box-shadow:0 1px 3px #AAAAAA;line-height:180%;padding:0 15px 12px;max-width:500px;margin:50px auto;color:#222;font-family:Century Gothic,Trebuchet MS,Hiragino Sans GB,微软雅黑,Microsoft Yahei,Tahoma,Helvetica,Arial,SimSun,sans-serif;font-size:12px;">
          <h2 style="border-bottom:1px solid #DDD;font-size:14px;font-weight:normal;padding:13px 0 10px 8px;"><span style="color: #12ADDB;font-weight: bold;">&gt; </span>您在博客<a style="text-decoration:none;color: #12ADDB;" href="' . home_url() . '" target="_blank">' . get_option("blogname") . '</a>上的留言有回复啦!</h2>
          <div style="padding:0 12px 0 12px;margin-top:18px">
            <p>亲爱的<b>' . trim(get_comment($parent_id)->comment_author) . '</b>:</p>
            <p>您曾在' . get_option("blogname") . '的文章《<a style="text-decoration:none;color: #12ADDB;" target="_blank" href="' . htmlspecialchars(get_comment_link($parent_id,array("type" => "all"))) . '">' . get_the_title($comment->comment_post_ID) . '</a>》发表评论:</p>
            <p style="background-color: #12ADDB;border: 0px solid #DDD;padding: 10px 15px;margin:18px 0;color: #ffffff;border-radius: 10px;">' . trim(get_comment($parent_id)->comment_content) . '</p>
            <p><b>'. $comment->comment_author .'</b>给您的回复如下:</p>
            <p style="background-color: #ff6574;border: 0px solid #DDD;padding: 10px 15px;margin:18px 0;color: #ffffff;border-radius: 10px;">' . trim($comment->comment_content) . '</p>
            <p>回复时间:' . trim($comment->comment_date) . '</p>
            <p>本邮件为系统自动发送,请勿直接回复,感谢您对<a style="text-decoration:none;color: #12ADDB;" target="_blank" href="' . home_url() . '">' . get_option("blogname") . '</a>的关注!</p>
          </div>
        </div>
      </div>
    </div>
  ';
  $from = "From: \"" . get_option('blogname') . "\" <$wp_email>";
  $headers = "$from\nContent-Type: text/html; charset=" . get_option('blog_charset') . "\n";
  wp_mail( $to, $subject, $message, $headers );
 }
}

同时也要加上这段代码,进行配置smtp服务,才能执行邮件的发送:

function iYuRen_mail_smtp($phpmailer) { //使用smtp发送邮件
    $phpmailer->AddReplyTo('your@mail.com','my email');//回复邮件的地址和名字
    $phpmailer->From = 'send@mailcom'; //发件人地址
    $phpmailer->FromName = '系统通知'; //发件人昵称
    $phpmailer->Host = 'smtp.mail.com'; //SMTP服务器地址
    $phpmailer->Port = '465'; //SMTP邮件发送端口
    $phpmailer->SMTPSecure = 'ssl';//SMTP加密方式(SSL/TLS)没有为空即可
    $phpmailer->Username = 'send@mail.com'; //邮箱帐号
    $phpmailer->Password = '12345678'; //邮箱密码
    $phpmailer->IsSMTP();
    $phpmailer->SMTPAuth = true; //启用SMTPAuth服务
}
add_action('phpmailer_init', 'iYuRen_mail_smtp');