說實話蠻久沒有好好搗鼓 WordPress 了,這幾天一直在考慮 WordPress 評論回復郵件通知的實現。
由于之前管理員郵箱 (webmaster[at]mangguo.org) 架在 Google Apps 上面,導致一直收不到 WordPress 系統郵件。關于這個蛋疼無比的問題,可詳細參考:http://ooxx.me/fail-to-receive-emails-with-google-apps.orz。
既然如此,為了強大的郵件通知功能,只好把郵局切換到主機供應商處,然后設置轉發到 QQ 郵箱。保證 WordPress 郵件發送功能可用是實現這個郵件通知的首要條件。
關于實現評論回復郵件通知,百度一下你就知道。也有很多現成的插件可以使用。這里介紹的方法無需插件,只要一份 functions.php 文件和一小段 JavaScript 代碼。
芒果采用了 Willin Kan 同學提供的方法,代碼也很簡單,只有二十幾行:
<?php
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 = 'webmaster@' . preg_replace('#^www.#', '', strtolower($_SERVER['SERVER_NAME']));
$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;">
<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><strong>感謝你對 <a href="' . get_option('home') . '" target="_blank">' . get_option('blogname') . '</a> 的關注,歡迎<a href="' . get_option('home') . '/feed/" target="_blank">訂閱本站</a></strong></p>
<p><strong>您可以直接回復此郵件與我聯系~</strong></p>
</div>';
$from = "From: "" . get_option('blogname') . "" <$wp_email>";
$headers = "$fromContent-Type: text/html; charset=" . get_option('blog_charset') . "";
wp_mail( $to, $subject, $message, $headers );
}
}
add_action('comment_post', 'comment_mail_notify');
?>
拷貝以上代碼,另存為 functions.php 上傳至當前模板目錄。
根據 WordPress 的評論機制,判斷某條評論是否為回復類型,需要通過 comment_parent 字段來識別。所以當某條評論被回復時,我們需要獲得這個被回復評論的唯一 ID,將其和回復關聯。
這里我們選擇在評論發布表單中設定一個隱藏域,來存放剛剛那個臨時 ID,并通過 JavaScript 為每條評論的“回復”鏈接綁定事件,動態改變隱藏域的 value 屬性值。
<input type="hidden" id="comment_parent" name="comment_parent" value="" />JavaScript 代碼(芒果這里用的是 jQuery)也很簡單:
$('.reply').click(function(){
$('#comment_parent').val($(this).attr(rel));
});每個“回復”鏈接的 “rel” 屬性中存放了當前評論的唯一 ID,通過 $comment -> comment_ID 輸出即可。芒果已經測試成功。o(∩_∩)o 哈哈,也沒啥技術含量,僅供把玩。
出處:http://www.mangguo.org/