9HOST.ORG
资源分享下载

WordPress评论回复邮件通知 原生纯净代码解决方案

大叔在运营就爱主机的初期发现一个问题,就是有网友在qq问我为何她在我博客评论之后,我回复了她的那条评论后她却未收到邮件通知,她对此表示十分困惑并且要求大叔尽快增加此功能,大叔觉得她提出的意见非常好,因为大叔是这么想的:

因为当用户对你博客的文章感兴趣或有疑问时,很多都会在评论区给该文章做一些相关的评论。希望得到博客住或其它用户的共鸣或疑难解答。但有些问题不是很快就有人回复,所以时间长了,当初评论的用户也就忘记的这个问题,同时也忘记了你的博客。
所以想要更好的留住用户,最重要的当然是要及时的回复用户的评论。但有时因为各种各样的原因,不能及时的回复读者,时间长了,当我们再回复或解答这个问题时,这个用户不一定会再次访问我们的博客。这样就不知道你的回复,也就防碍了博主和用户或用户和用户之间的交流。

接下来就让河马大叔详细介绍一下如何在不安装插件的情况下,直接使用原生纯净代码就能实现WordPress评论回复邮件通知的解决方案。

注意事项:
1、需要你的主机支持mail()函数。
2、一定不要使用记事本编辑php文件,否则很可能出现意想不到的错误,推荐使用EditPlus,Dreamweaver等。
3、如果对于修改代码不是很有把握,请预先备份好原来的文件。
4、复制本文的代码,如果是全角符号,请自行改为半角符号,切记。
5、向Willin Kan大师致敬,中文wordpress圈很多人在使用他的评论回复邮件提醒通知代码。

实现wordpress评论邮件通知的修改代码方法:登陆博客后台,点击“外观”菜单下的“编辑”选项进入主题编辑界面,再选择functions.php文件,实现评论回复发送邮件通知的功能,就在之间添加以下函数:

代码1:所有回复都发送邮件通知

默认所有填写了邮箱的评论都将发邮件提醒评论人,没有任何勾选设置。

/* comment_mail_notify v1.0 by willin kan. (所有回复都发邮件) */
function comment_mail_notify($comment_id) {
  $comment = get_comment($comment_id);
  $parent_id = $comment->comment_parent ? $comment->comment_parent : '';
  $spam_confirmed = $comment->comment_approved;
  if (($parent_id != '') && ($spam_confirmed != 'spam')) {
    $wp_email = 'no-reply@' . preg_replace('#^www.#', '', strtolower($_SERVER['SERVER_NAME'])); //e-mail 发出点, no-reply 可改为可用的 e-mail.
    $to = trim(get_comment($parent_id)->comment_author_email);
    $subject = '您在 [' . get_option("blogname") . '] 的留言有了回复';
    $message = '
' . trim(get_comment($parent_id)->comment_author) . ', 您好! 您曾在《' . get_the_title($comment->comment_post_ID) . '》的留言: ' . trim(get_comment($parent_id)->comment_content) . ' ' . trim($comment->comment_author) . ' 给您的回复: ' . trim($comment->comment_content) . ' 您可以点击 查看回复完整內容 欢迎再度光临 ' . get_option('blogname') . ' (此邮件由系统自动发送,请勿回复.)
'; $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 ); } } add_action('comment_post', 'comment_mail_notify'); // -- END ----------------------------------------

代码2:让访客自己选择是否邮件通知

在评论框下方显示一个勾选框,让评论人自己决定是否接收邮件通知。

/* 开始*/
function comment_mail_notify($comment_id) {
  $admin_notify = '1'; // admin 要不要收回复通知 ( '1'=要 ; '0'=不要 )
  $admin_email = get_bloginfo ('admin_email'); // $admin_email 可改为你指定的 e-mail.
  $comment = get_comment($comment_id);
  $comment_author_email = trim($comment->comment_author_email);
  $parent_id = $comment->comment_parent ? $comment->comment_parent : '';
  global $wpdb;
  if ($wpdb->query("Describe {$wpdb->comments} comment_mail_notify") == '')
    $wpdb->query("ALTER TABLE {$wpdb->comments} ADD COLUMN comment_mail_notify TINYINT NOT NULL DEFAULT 0;");
  if (($comment_author_email != $admin_email && isset($_POST['comment_mail_notify'])) || ($comment_author_email == $admin_email && $admin_notify == '1'))
    $wpdb->query("UPDATE {$wpdb->comments} SET comment_mail_notify='1' WHERE comment_ID='$comment_id'");
  $notify = $parent_id ? get_comment($parent_id)->comment_mail_notify : '0';
  $spam_confirmed = $comment->comment_approved;
  if ($parent_id != '' && $spam_confirmed != 'spam' && $notify == '1') {
    $wp_email = 'no-reply@' . preg_replace('#^www.#', '', strtolower($_SERVER['SERVER_NAME'])); // e-mail 发出点, no-reply 可改为可用的 e-mail.
    $to = trim(get_comment($parent_id)->comment_author_email);
    $subject = '您在 [' . get_option("blogname") . '] 的留言有了回复';
    $message = '
    <div style="background-color:#eef2fa; border:1px solid #d8e3e8; color:#111; padding:0 15px; -moz-border-radius:5px; -webkit-border-radius:5px; -khtml-border-radius:5px;">
      <p>' . trim(get_comment($parent_id)->comment_author) . ', 您好!</p>
      <p>您曾在《' . get_the_title($comment->comment_post_ID) . '》的留言:<br />'
       . trim(get_comment($parent_id)->comment_content) . '</p>
      <p>' . trim($comment->comment_author) . ' 给您的回复:<br />'
       . trim($comment->comment_content) . '<br /></p>
      <p>您可以点击查看回复的完整內容</p>
      <p>还要再度光临 ' . get_option('blogname') . '</p>
      <p>(此邮件由系统自动发送,请勿回复.)</p>
    </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 );
  }
}
add_action('comment_post', 'comment_mail_notify');

/* 自动加勾选栏 */
function add_checkbox() {
  echo '<input type="checkbox" name="comment_mail_notify" id="comment_mail_notify" value="comment_mail_notify" checked="checked" style="margin-left:20px;" /><label for="comment_mail_notify">有人回复时邮件通知我</label>';
}
add_action('comment_form', 'add_checkbox');

 

代码3:让博客管理员决定什么情况下发邮件

你可以根据自己的需求,配置下面代码(看代码注释),决定什么情况才发邮件。

/* comment_mail_notify v1.0 by willin kan. (无勾选栏) */
function comment_mail_notify($comment_id) {
  $admin_email = get_bloginfo ('admin_email'); // $admin_email 可改为你指定的 e-mail.
  $comment = get_comment($comment_id);
  $comment_author_email = trim($comment->comment_author_email);
  $parent_id = $comment->comment_parent ? $comment->comment_parent : '';
  $to = $parent_id ? trim(get_comment($parent_id)->comment_author_email) : '';
  $spam_confirmed = $comment->comment_approved;
  if (($parent_id != '') && ($spam_confirmed != 'spam') && ($to != $admin_email) && ($comment_author_email == $admin_email)) {
    /* 上面的判断式,决定发出邮件的必要条件:
    ($parent_id != '') && ($spam_confirmed != 'spam'): 回复的, 而且不是 spam 才可发, 必需!!
    ($to != $admin_email) : 不发给 admin.
    ($comment_author_email == $admin_email) : 只有 admin 的回复才可发.
    可视个人需修改上面的条件.
    */
    $wp_email = 'no-reply@' . preg_replace('#^www.#', '', strtolower($_SERVER['SERVER_NAME'])); // e-mail 发出点, no-reply 可改为可用的 e-mail.
    $subject = '您在 [' . get_option("blogname") . '] 的留言有了回复';
    $message = '
    <div style="background-color:#eef2fa; border:1px solid #d8e3e8; color:#111; padding:0 15px; -moz-border-radius:5px; -webkit-border-radius:5px; -khtml-border-radius:5px;">
      <p>' . trim(get_comment($parent_id)->comment_author) . ', 您好!</p>
      <p>您曾在《' . get_the_title($comment->comment_post_ID) . '》的留言:<br />'
       . trim(get_comment($parent_id)->comment_content) . '</p>
      <p>' . trim($comment->comment_author) . ' 给您的回复:<br />'
       . trim($comment->comment_content) . '<br /></p>
      <p>您可以点击 查看回复的完整內容</p>
      <p>还要再度光临 ' . get_option('blogname') . '</p>
      <p>(此邮件由系统自动发送,请勿回复.)</p>
    </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 );
  }
}
add_action('comment_post', 'comment_mail_notify');
// -- END ----------------------------------------

代码4:河马大叔正在用的

黑白底色,微软雅黑字体,是不是很好看呢?
email-screen

/* WordPress非插件实现评论回复邮件提醒通知 让访客自己选择是否邮件通知  开始*/
function comment_mail_notify($comment_id) {
  $admin_notify = '1'; // admin 要不要收回复通知 ( '1'=要 ; '0'=不要 )
  $admin_email = get_bloginfo ('admin_email'); // $admin_email 可改为你指定的 e-mail.
  $comment = get_comment($comment_id);
  $comment_author_email = trim($comment-&gt;comment_author_email);
  $parent_id = $comment-&gt;comment_parent ? $comment-&gt;comment_parent : '';
  global $wpdb;
  if ($wpdb-&gt;query("Describe {$wpdb-&gt;comments} comment_mail_notify") == '')
    $wpdb-&gt;query("ALTER TABLE {$wpdb-&gt;comments} ADD COLUMN comment_mail_notify TINYINT NOT NULL DEFAULT 0;");
  if (($comment_author_email != $admin_email &amp;&amp; isset($_POST['comment_mail_notify'])) || ($comment_author_email == $admin_email &amp;&amp; $admin_notify == '1'))
    $wpdb-&gt;query("UPDATE {$wpdb-&gt;comments} SET comment_mail_notify='1' WHERE comment_ID='$comment_id'");
  $notify = $parent_id ? get_comment($parent_id)-&gt;comment_mail_notify : '0';
  $spam_confirmed = $comment-&gt;comment_approved;
  if ($parent_id != '' &amp;&amp; $spam_confirmed != 'spam' &amp;&amp; $notify == '1') {
    $wp_email = 'no-reply@' . preg_replace('#^www\.#', '', strtolower($_SERVER['SERVER_NAME'])); // e-mail 发出点, no-reply 可改为可用的 e-mail.
    $to = trim(get_comment($parent_id)-&gt;comment_author_email);
    $subject = '您在 [' . get_option("blogname") . '] 的评论有了回复';
    $message = '</pre>
<div style="background-color: #fff; border: 1px solid #666666; color: #111; -moz-border-radius: 8px; -webkit-border-radius: 8px; -khtml-border-radius: 8px; border-radius: 8px; font-size: 12px; width: 702px; margin: 0 auto; margin-top: 10px; font-family: 微软雅黑, Arial;">
<div style="background: #666666; width: 100%; height: 60px; color: white; -moz-border-radius: 6px 6px 0 0; -webkit-border-radius: 6px 6px 0 0; -khtml-border-radius: 6px 6px 0 0; border-radius: 6px 6px 0 0;"><span style="height: 60px; line-height: 60px; margin-left: 30px; font-size: 12px;">您在<a style="text-decoration: none; color: #00bbff; font-weight: 600;" href="' . get_option('home') . '">' . get_option('blogname') . '</a>博客上的评论有回复啦!</span></div>
<div style="width: 90%; margin: 0 auto;">
' . trim(get_comment($parent_id)-&gt;comment_author) . ', 您好!
&nbsp;
您曾在 [' . get_option("blogname") . '] 的文章《' . get_the_title($comment-&gt;comment_post_ID) . '》 上发表评论:
<p style="background-color: #eee; border: 1px solid #DDD; padding: 20px; margin: 15px 0;">' . nl2br(get_comment($parent_id)-&gt;comment_content) . '</p>
' . trim($comment-&gt;comment_author) . ' 给您的回复如下:
<p style="background-color: #eee; border: 1px solid #DDD; padding: 20px; margin: 15px 0;">' . nl2br($comment-&gt;comment_content) . '</p>
您可以点击 <a style="text-decoration: none; color: #00bbff;" href="' . htmlspecialchars(get_comment_link($parent_id)) . '">查看回复的完整內容</a>
欢迎再次光临 <a style="text-decoration: none; color: #00bbff;" href="' . get_option('home') . '">' . get_option('blogname') . '</a>
(此邮件由系统自动发出, 请勿回复.)
</div>
</div>
'; $from = "From: \"" . get_option('blogname') . "\" &lt;$wp_email&gt;"; $headers = "$from\nContent-Type: text/html; charset=" . get_option('blog_charset') . "\n"; wp_mail( $to, $subject, $message, $headers ); //echo 'mail to ', $to, '
' , $subject, $message; // for testing } } add_action('comment_post', 'comment_mail_notify'); /* 自动加勾选栏 */ function add_checkbox() { echo '<input id="comment_mail_notify" style="margin-left: 20px;" checked="checked" name="comment_mail_notify" type="checkbox" value="comment_mail_notify" /><label for="comment_mail_notify">有人回复时邮件通知我</label>'; } add_action('comment_form', 'add_checkbox');
赞(0) 打赏
未经允许不得转载:就爱分享 » WordPress评论回复邮件通知 原生纯净代码解决方案

评论 21

  1. #6

    加了回复邮件功能 是否感觉提交回复时间变长

    陈江林SEO11年前 (2014-08-11)回复
  2. #5

    我想问一下,这个怎么改成用smtp邮件发送,自带的老是进垃圾箱。

    dospytang11年前 (2014-04-13)回复
  3. #4

    代码拿走了 非常感谢

    Louis Han11年前 (2014-03-27)回复
  4. #3

    用了上面的代码,多说评论的,还能接收到主题发的邮件吗?

    woween12年前 (2013-10-04)回复
  5. #2

    用多说不久好了

    ivmm12年前 (2013-06-28)回复
    • 多说其实也有些小问题,我之前到官方去反馈过的,也是关于邮件通知的。
      多说的邮件通知不是即时的,而是每日凌晨统一发送,这点我是接受不了的。

      河马大叔12年前 (2013-06-28)回复
      • 用多说的网站都会提示的呀,这个比看邮件方便多了

        ivmm12年前 (2013-06-28)回复
        • 的确会提示,但是除非你频繁刷新自己的站点,否则还是不会知道有人回复自己的评论,邮件通知的话我的chrome会知道,手机会提示。

          河马大叔12年前 (2013-06-28)回复
        • 的确会提示,但是除非你频繁刷新自己的站点,否则还是不会知道有人回复自己的评论,邮件通知的话我的chrome会知道,手机会提示。

          河马大叔12年前 (2013-06-28)回复
          • 只要是用多说的,例如你的。

            ivmm12年前 (2013-07-03)回复
            • 用了上面的代码,多说评论的,还能接收到主题发的邮件吗?

              woween12年前 (2013-10-04)回复
  6. #1

    我也在用这个样式。

    免费资源部落12年前 (2013-06-23)回复
    • 哇,你也来了,订阅你博客很久了,以后常来噢。

      河马大叔12年前 (2013-06-23)回复
    • 有更漂亮的样式没

      woween12年前 (2013-10-03)回复
    • 我终于发现和QI一样的邮件回复通知的界面了,就是不知道多说现在能不能设置为即时回复邮件通知

      Jason Huang11年前 (2014-03-17)回复

更好的资源分享下载平台

包括最佳在线服务,热门免费软件,手机APP和电子书...

最佳在线服务免费电脑软件

觉得文章有用就打赏一下河马大叔

非常感谢你的打赏,我将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

微信扫一扫