最近两天一直在忙着整理博客,首先是主机一直在线率很低,跟服务商联系的同时还在着手换主机,但是换的临时主机不支持mail()函数,就暂时没有解析过去,还好今天主机恢复了,而且服务商好像启用的禁ping的功能,总而言之,速度是不错了,在线率还有待检测。

下面说重点,最近显示更新了博客评论,添加了ajax的评论效果,已经完美避免了以前博友说的评论后浏览器假死的情况。最近一直在调试一个评论回应邮件提醒的功能,目前已经测试通过,不知道还有没有其他未发现的bug,还望大家帮忙测试。下面,还为大家提供下我的解决方案。

还是用的willin的代码修改方式,已经测试在3.1(目前最高版本)可以用。

在自己主题的functions.php文件的最下部添加以下代码即可。

一、有勾选框, 由访客决定是否要回应邮件通知:

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 = 'noreply@' . preg_replace('#^www\.#', '', strtolower

($_SERVER['SERVER_NAME'])); // e-mail 发出点, noreply 可改为可用的 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; 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>您可以点击 <a href="' . htmlspecialchars(get_comment_link

($parent_id)) . '">查看回应完整內容</a></p>

<p>欢迎再度光临 <a href="' . get_option('home') . '">' . get_option

('blogname') . '</a></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 );

//echo 'mail to ', $to, '<br /> ' , $subject, $message; // for testing

}

}

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');

// -- END ----------------------------------------

?>

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

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 != '') &amp;&amp; ($spam_confirmed !

= 'spam') &amp;&amp; ($to !

= $admin_email) &amp;&amp; ($comment_author_email == $admin_email)) {

/* 上面的判斷式,決定發出郵件的必要條件:

($parent_id != '') &amp;&amp; ($spam_confirmed != 'spam'): 回覆的, 而且不是 

spam 才可發, 必需!!

($to != $admin_email) : 不發給 admin.

($comment_author_email == $admin_email) : 只有 admin 的回覆才可發.

可视个人需求修改以上条件.

*/

$wp_email = 'noreply@' . preg_replace('#^www\.#', '', strtolower

($_SERVER['SERVER_NAME'])); // e-mail 发出点, noreply 可改为可用的 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; 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>您可以点击 <a href="' . htmlspecialchars(get_comment_link

($parent_id)) . '">查看回应完整內容</a></p>

<p>欢迎再度光临 <a href="' . get_option('home') . '">' . get_option

('blogname') . '</a></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 );

//echo 'mail to ', $to, '<br /> ' , $subject, $message; // for testing

}

}

add_action('comment_post', 'comment_mail_notify');

// -- END ----------------------------------------

?>

三、所有回复都发邮件:

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 != '') &amp;&amp; ($spam_confirmed != 'spam')) {

$wp_email = 'noreply@' . preg_replace('#^www\.#', '', strtolower

($_SERVER['SERVER_NAME'])); //e-mail 发出点, noreply 可改为可用的 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; 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>您可以点击 <a href="' . htmlspecialchars(get_comment_link

($parent_id)) . '">查看回应完整內容</a></p>

<p>欢迎再度光临 <a href="' . get_option('home') . '">' . get_option

('blogname') . '</a></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 );

//echo 'mail to ', $to, '<br /> ' , $subject, $message; // for testing

}

}

add_action('comment_post', 'comment_mail_notify');

// -- END ----------------------------------------

?>

使用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'))