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