最近两天一直在忙着整理博客,首先是主机一直在线率很低,跟服务商联系的同时还在着手换主机,但是换的临时主机不支持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 != '') && ($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 = '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 != '') && ($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'))上一篇: 禁用 WordPress 3.1 管理员工具栏 下一篇: 谈谈自己亲测14款浏览器的体验