博客新增評論回復郵件通知功能打賞

最近兩天一直在忙著整理博客,首先是主機一直在線率很低,跟服務商聯系的同時還在著手換主機,但是換的臨時主機不支持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?=?'[email protected]'?.?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?=?'[email protected]'?.?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?=?'[email protected]'?.?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'))
博客新增評論回復郵件通知功能
文章《博客新增評論回復郵件通知功能》二維碼
  • 微信打賞
  • 支付寶打賞

已有6條評論

  1. 游客 997

    正在找這個,謝謝!

    2018-02-04 09:48 回復
  2. bovadamobileapp

    I am sure this paragraph has touched all the internet visitors, its really really god article on building up nnew web
    site.

    2017-10-04 04:31 回復
  3. Cyan

    看起來好復雜哦……

    2011-11-14 10:11 回復
    • 窮小子

      其實不怎么復雜。寫這么多是因為有三種形式,一般情況下只要復制其中一段到function中就行了,具體的郵箱修改下,其他的不用變

      2011-11-14 14:20 回復
  4. 點點點

    每個評論回復都發啊,豈不是很多垃圾郵件

    2011-03-13 12:31 回復
  5. 小破孩

    路過,看看,瞧瞧

    2011-03-12 17:04 回復

(必填)

(必填)

(可選)

黑龙江22选5开奖