給 WordPress 網站評論回覆郵件提醒功能,可以通過郵件通知評論者的自己的評論被回覆,很大程度提高了用户體驗,同時增加訪客的回頭訪問率,因此很受 WordPress 站長的喜歡。但是博主發現目前流傳的郵件提醒代碼存在重大的 bug 。
我可以給你博客的所有評論都回復一遍,不僅在你的博客留下了垃圾評論,垃圾內容也通過評論回覆提醒郵件順帶發出去了。
無需花費心思去獲取評論者的郵件地址,也不用擔心評論是否還在等待審核,垃圾廣告內容順利發出,歐耶!
如果這個 bug 被人利用,博客將成為垃圾郵件的發送者,不僅對評論用户,對自己博客的危險都非常大。
解決方法:
1 、進入 WordPress 後台 – 設置 – 討論,勾選」 評論必須經人工批准」,這樣所有評論必須經過管理員審核才能顯示,雖然有點麻煩,但是我覺得這是博主應該負起的一項責任。
2 、接着需要將之前的評論回覆郵件提醒的代碼做些修改。
新設計的運行機制是這樣的:對於管理員和編輯的評論回覆,可以直接給評論者發送提醒郵件;對於普通訪客發表的評論,先讓它在待審評論中待著,等博主審核後,再給評論者發送提醒郵件。
下面是一個評論回覆郵件提醒的代碼範例,使用的是所有評論回覆都發送郵件通知的版本,如果你需要其他功能,請參考網上的代碼進行修改:
function ludou_comment_mail_notify($comment_id, $comment_status) {
// 評論必須經過審核才會發送通知郵件
if ($comment_status !== 'approve'%20<span%20style="color: #339933;">&& $comment_status !== 1)
return;
$comment = get_comment($comment_id);
if ($comment->comment_parent != '0'<span%20style="color: #009900;">) {
$parent_comment = get_comment($comment->comment_parent);
// 郵件接收者 email
$to = trim($parent_comment->comment_author_email);
// 郵件標題
$subject = '您在
// 郵件內容,自行修改,支持 HTML
$message = '
<p>Hi, '%20<span%20style="color: #339933;">. $parent_comment->comment_author . '</p>
<p> 您之前在 《'%20<span%20style="color: #339933;">. get_the_title($comment->comment_post_ID) . '》 的留言:<br />'
. $parent_comment->comment_content . '</p>
<p>'%20<span%20style="color: #339933;">. $comment->comment_author . ' 給您回覆:<br />'
. $comment->comment_content . '<br /><br /></p>
<p> 您可以 <a href="'%20<span%20style="color: #339933;">. htmlspecialchars(get_comment_link($comment->comment_parent)) . '"> 點此查看回復完整內容</a></p>
<p> 歡迎再度光臨 <a href="'<span%20style="color: #339933;">.home_url().'">'%20<span%20style="color: #339933;">. get_option('blogname'<span%20style="color: #009900;">) . '</a></p>
<p>(此郵件由系統自動發送,請勿回覆)</p>'<span%20style="color: #339933;">;
$message_headers = "Content-Type: text/html; charset="".get_option('blog_charset'<span%20style="color: #009900;">).""
";
// 不用給不填 email 的評論者和管理員發提醒郵件
if($to != ''%20<span%20style="color: #339933;">&& $to != get_bloginfo('admin_email'<span%20style="color: #009900;">))
@wp_mail($to, $subject, $message, $message_headers);
}
}
// 編輯和管理員的回覆直接發送提醒郵件,因為編輯和管理員的評論不需要審核
add_action('comment_post'<span%20style="color: #339933;">, 'ludou_comment_mail_notify'<span%20style="color: #339933;">, 20, 2);
// 普通訪客發表的評論,等博主審核後再發送提醒郵件
add_action('wp_set_comment_status'<span%20style="color: #339933;">, 'ludou_comment_mail_notify'<span%20style="color: #339933;">, 20, 2);