三款非插件WordPress回复自动发邮件代码

博客搬家并启用新主题,今天就启用回复自动发邮件功能,从Forece那里找到三款代码,省去用插件的麻烦,三款的功能基本相同,但稍有不同:一个是用户自己决定收不收邮件,一个是管理员决定,一个是都发,根据自己需要选择吧。

这个是 Ajax comments 评论回应邮件通知的升级版,主要改进了以下功能。

1. 所有的模板都适用,不只是 Ajax comments.

2. 管理者在后台回复也可以发邮件.

如果大家对以前的版本感兴趣,可以通过传送门过去。。。。

安裝步驟:

1. 如果你用了上一版的 “Ajax comments 回应邮件通知”, 请先在 comments-ajax.php 删除上一版的代码.

2. 在下面的三种方式,选择你想用的代码, copy 到 functions.php 文件里.

必须注意的是:你的服务器一定要支持 mail() 功能。测试方法:在登陆页面故意点击“忘记密码”,收到重置密码邮件就说明主机支持 mail() 功能,没收到就可以下课了。

一、有勾选项,由访客决定是否要接收邮件通知:

(会在模板自动加勾选项,如果不想自动加,可把最后一小段删除)

/* comment_mail_notify v1.0 by willin kan. (有勾选项,由游客决定) */
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 = '
    

' . 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 ); //echo 'mail to ', $to, '
' , $subject, $message; // for testing } } add_action('comment_post', 'comment_mail_notify'); // -- END ---------------------------------------- /* 自动加勾选 */ function add_checkbox() { echo ''; } add_action('comment_form', 'add_checkbox'); // -- END ----------------------------------------

二、无勾选项,由管理者决定在什么条件下发邮件:

/* 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 可改为可用的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 ); //echo 'mail to ', $to, '
' , $subject, $message; // for testing } } add_action('comment_post', 'comment_mail_notify'); // -- END ----------------------------------------

三、所有回复都发邮件:

/* 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 可改为可用的email。
    $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 ); //echo 'mail to ', $to, '
' , $subject, $message; // for testing } } add_action('comment_post', 'comment_mail_notify'); // -- END ----------------------------------------

◎2010/4/2 发现这个代码在评论分页的 get_comment_link() 有个 bug.

这 bug 对使用 comments 和 trackbacks/pingbacks 分离的情况才会出现,没分离的没有影响.

当直接调用 get_comment_link() 因为没经过 wp_list_comments(‘type=comment’) 函数,它会以所有的评论作为分页对象. 所以 trackbacks/pingbacks 数量多的时候会让 cpage 多算了, 本来是 cpage=7 会成了 cpage=8, 所以点击邮件里的“查看回应完整内容会找不到正确评论页面”.

— 修正方式 —-

将以上的:

get_comment_link($parent_id)

改为:

get_comment_link($parent_id, array('type' => 'comment'))

加入的参数是让它选取 comment 数量计算就好.

评论样式有使用 comments 和 trackbacks/pingbacks 分离的童鞋,请进行修改,没用到的就不用改了。

落花生

认准了方向,就要勇敢地走下去,十年磨一剑,我相信,只要坚持,一切都有可能。

相关日志

  1. 没有图片

    2010.09.27

    Excel 2010 的功能和优点

    使用 Microsoft Excel 201…

  2. 没有图片

    2012.06.22

    CentOS配置上网,修改IP地址,DNS,网关

    一、CentOS 修改IP地址 修改对应网卡…

  3. 2017.01.09

    实用的 Table CSS 样式

    搞过了很多前端,用过不少的表格优化代码,今天…

  4. 没有图片

    2010.01.30

    30个精选的CSS技术和实例

    1.Hoverbox 图片集 一个纯净的基于…

  5. 2011.11.21

    25个美食网站WEB设计欣赏

    菠萝一般不研究美食的,不过今天整理出25个美…

  6. 2013.04.10

    WordPress 3.6 Beta1 发布

    对没错!WordPress 3.6 Beta…

评论

  1. دولقۇن731 2011.06.30 2:31上午

    改天分享这个(维吾尔语言的), 谢谢。

  2. 老衲 2011.04.27 8:46下午

    Ajax comments里面删除什么?
    弄了很长时间弄不好评论邮件….

  3. 黑豆 2011.03.25 9:07下午

    香港主机好慢

    • 落花生 2011.03.26 8:49上午

      香港主机比国内肯定要慢一些,但比美国应该能快一些。

  4. 小黑黑 2011.03.25 8:18下午

    添加失败了~不折腾了,用默认的就成!你是香港主机?

    • 落花生 2011.03.26 8:49上午

      失败之后感觉很不爽,我得再折腾折腾!香港主机。

  5. 卢松松 2011.03.25 4:17下午

    wp的插件就是多,扩展性也强

  6. Firm 2011.03.25 11:51上午

    不知道要主机支持邮箱不

    • 落花生 2011.03.26 8:50上午

      主机是支持的,是我没配置好。

  7. Louis Han 2011.03.24 10:07下午

    不太喜欢折腾 还是用插件算了

    • 落花生 2011.03.24 10:31下午

      我也是败了好几次才成功的。

  8. 学夫子 2011.03.24 9:38下午

    以前用wp的时候觉得这个好麻烦,搞了半天没有搞定,最后用emlog,一个插件就搞定了……而且是同样的主机

    • 落花生 2011.03.24 10:30下午

      emlog就是非常易用,这点做得不错。

  9. 德州SEO 2011.03.24 9:28下午

    哦学习了

  10. 小清 2011.03.24 7:54下午

    ….测试邮件?

    • 落花生 2011.03.24 8:06下午

      你直接按教程来设置就可以成功!

  11. 搓板 2011.03.24 7:52下午

    怎么现在都流行 wpbus的模版

  12. 韩国 2011.03.24 7:28下午

    邮件已经够多了。

    • 落花生 2011.03.24 7:38下午

      但优秀的还是不多,国内的这些都不够专业!