大叔在运营就爱主机的初期发现一个问题,就是有网友在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:河马大叔正在用的
黑白底色,微软雅黑字体,是不是很好看呢?
/* 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->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 = '</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)->comment_author) . ', 您好! 您曾在 [' . get_option("blogname") . '] 的文章《' . get_the_title($comment->comment_post_ID) . '》 上发表评论: <p style="background-color: #eee; border: 1px solid #DDD; padding: 20px; margin: 15px 0;">' . nl2br(get_comment($parent_id)->comment_content) . '</p> ' . trim($comment->comment_author) . ' 给您的回复如下: <p style="background-color: #eee; border: 1px solid #DDD; padding: 20px; margin: 15px 0;">' . nl2br($comment->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') . "\" <$wp_email>"; $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');
声明:文章仅为分享信息,绝对不是推荐,所有内容均仅代表个人观点,读者购买风险自担。本文由【 河马大叔 】原创编译。转载务必注明 | 《WordPress评论回复邮件通知 原生纯净代码解决方案》出处。
注意:河马大叔有义务保证您的个人信息不经由就爱主机透露给任何第三方,所以任何虚假邮箱的评论将不做回应,直接放入垃圾评论区域。
加了回复邮件功能 是否感觉提交回复时间变长
没有这种情况发生。
我想问一下,这个怎么改成用smtp邮件发送,自带的老是进垃圾箱。
代码4. 谢谢了。
代码拿走了 非常感谢
不客气
用了上面的代码,多说评论的,还能接收到主题发的邮件吗?
这个我没有尝试过,你可以试试
用多说不久好了
多说其实也有些小问题,我之前到官方去反馈过的,也是关于邮件通知的。
多说的邮件通知不是即时的,而是每日凌晨统一发送,这点我是接受不了的。
用多说的网站都会提示的呀,这个比看邮件方便多了
的确会提示,但是除非你频繁刷新自己的站点,否则还是不会知道有人回复自己的评论,邮件通知的话我的chrome会知道,手机会提示。
的确会提示,但是除非你频繁刷新自己的站点,否则还是不会知道有人回复自己的评论,邮件通知的话我的chrome会知道,手机会提示。
只要是用多说的,例如你的。
用了上面的代码,多说评论的,还能接收到主题发的邮件吗?
我也在用这个样式。
哇,你也来了,订阅你博客很久了,以后常来噢。
有更漂亮的样式没
我终于发现和QI一样的邮件回复通知的界面了,就是不知道多说现在能不能设置为即时回复邮件通知