WordPress 实现评论回复邮件通知,核心是两步:配置可靠的邮件发送(SMTP) + 触发通知逻辑(插件 / 代码)。下面给你最实用的两种方案(插件 / 无插件),直接可用。
一、插件实现
这里不再多说,类似插件不少,推荐插件:WP Mail SMTP(免费够用)
二、免插件实现
1. 核心代码(functions.php)
php
// 评论回应邮件通知
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 = 'no-reply@' . preg_replace('#^www\.#', '', strtolower($_SERVER['SERVER_NAME'])); // e-mail 发出点, no-reply 可改为可用的 e-mail.
$subject = '您在 [' . get_option("blogname") . '] 的留言有了新回复';
$message = '
<div style="background-color:#FFF; border:1px solid #39F; color:#333;font-size:14px; width:90%; margin:0 auto; margin-top:10px; ">
<div style="background:#39F; width:100%; height:60px; color:white; ">
<span style="height:60px; line-height:60px; margin-left:30px; font-size:16px;">您在<a style="text-decoration:none; color:#000;font-weight:600;" href="/'%20.%20get_option('home')%20.%20'"> <strong>' . get_option("blogname") . '</strong> </a>上<strong>《' . get_the_title($comment->comment_post_ID) . '》</strong>的留言有了一个新回复</span></div>
<div style="width:80%; margin:0 auto"><p>您在<strong>《' . get_the_title($comment->comment_post_ID) . '》</strong>的留言是:</p>
<p style="background-color: #EEE;border: 1px solid #ccc;padding: 20px;margin: 15px 0;">' . nl2br(get_comment($parent_id)->comment_content) . '</p>
<p>' . trim($comment->comment_author) . ' 给您的新回复是:</p><p style="background-color: #EEE;border: 1px solid #ccc;padding: 20px;margin: 15px 0;">' . nl2br($comment->comment_content) . '</p>
<p>您可以点击“<a href="/'%20.%20htmlspecialchars(get_comment_link($parent_id))%20.%20'">这里</a>”查看评论
</p>如果你不能点击上面的链接可以吧下面的链接复制到地址栏中访问
<p style="background-color: #EEE;border: 1px solid #ccc;padding: 20px;margin: 15px 0;"><a href="/'%20.%20htmlspecialchars(get_comment_link($parent_id))%20.%20'">' . htmlspecialchars(get_comment_link($parent_id)) . '</a></p>
<p style="text-align:center;font-weight:600;font-size:16px;">欢迎再次光临 <a style="text-decoration:none; color:#d14836" href="/'%20.%20get_option('home')%20.%20'">' . get_option('blogname') . '</a></p>
<p style="text-align:center;color:red">注意:此邮件由系统发出,请勿回复!</p>
</div>
</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, '
' , $subject, $message; // for testing
}
}
add_action('comment_post', 'comment_mail_notify');
2、代码版优化:仅用户勾选时发信
php
<!-- 评论回复通知勾选框 -->
<p class="comment-form-mail-notify">
<label for="mail_notify">
<input type="checkbox" name="mail_notify" id="mail_notify" value="1" checked>
接收他人回复我的评论的邮件通知
</label>
</p>
三、常见问题
1、邮件进垃圾箱:必须用 SMTP 发信,不要用默认 mail() 函数。
2、收不到邮件:检查 SMTP 配置、邮箱授权码、垃圾邮件箱。
3、代码不生效:确保 wp_mail() 正常、评论状态为 approve、父评论存在。
4、主题更新覆盖代码:建议用子主题或自定义插件存放代码。