评论回复邮件功能前面有篇文章已经介绍了,也就相关问题进行了解答,这次的代码与网络流传的不一样,是从某全站ajax主题上扒下来的。
回复发邮件的功能大体都一样,原理是利用wp_mail函数来发送
@wp_mail ( $to_email, $subject, $message, $headers );
触发wp_mail函数可以利用php的mail函数,也可以用smtp。所以只要php支持mail函数或者smtp都可以实现这个功能。
那么就要在functions.php里面写一个函数,用add_action与wp挂钩即可。这个函数主要是判断是否要回复发送邮件,如果要则执行wp_mail,如果否则不执行。 其中wp_mail函数里面的参数变量意思如下:
- $to_email: 要通知的邮箱
- $subject:邮件标题
- $message:邮件内容(可以分几行来完成)
- $headers: 邮件头部(设置编码格式)
下面是完整的函数inlo_reply_mail_notify()
// 评论回复邮件通知 add_action ( 'comment_post', 'inlo_reply_mail_notify' ); function inlo_reply_mail_notify($comment_id) { // 下面这些在if判断前的变量都是为邮件内容准备的 $comment = get_comment ( $comment_id ); // 该评论id $parent_id = $comment->comment_parent; if (! empty ( $_POST ['reply_mail_notify'] ) && $_POST ['reply_mail_notify'] == 'Y') { // 若input表单中name="reply_mail_notify"的值不为空并且为Y add_comment_meta ( $comment_id, 'reply_mail_notify', 'Y' ); } $post_title = get_the_title ( $comment->comment_post_ID ); // 获取文章标题 $post_link = get_permalink ( $comment->comment_post_ID ); // 文章链接 $comment_link = get_comment_link ( $comment->comment_parent ); // 评论链接 $blog_name = get_option ( 'blogname' ); // 博客标题 $charset = get_option ( 'blog_charset' ); // 文章编码格式 $from_email = 'no-reply@' . preg_replace ( '/(.*\.)(.*\.\w+)/', '${2}', $_SERVER ['HTTP_HOST'] ); // 来源email $from = "From: \"" . $blog_name . "\" <{$from_email}>"; // 来源 $headers = "{$from}\nContent-Type: text/html; charset=" . $charset . "\n"; // 邮件头部 set_time_limit ( 0 ); // 设置发送时限 if (! empty ( $parent_id )) { // 若父级id不为空 $parent_comment = get_comment ( $parent_id ); // 父级评论内容 $is_mail_notify = get_comment_meta ( $parent_comment->comment_ID, 'reply_mail_notify', true ); // 是否需要邮件通知 if ($is_mail_notify ['reply_mail_notify'] == 'Y' && $comment->comment_approved == '1') { // 若需要邮件通知并且评论已审核 $to_email = trim ( $parent_comment->comment_author_email ); // 要通知的邮箱(删除邮箱的空格) $subject = '你在[' . $blog_name . ']上的留言有了新的回复'; // 邮件标题 // 邮件内容 $message = '<div style="width:800px;padding:10px 20px;font-family: 微软雅黑;color: #777;background-color: #fafafa;border: 1px solid #e3e3e3;border-top: 4px solid #1e8cbe;">'; $message .= '<p style="padding-bottom: 10px;border-bottom: 1px solid #E3E3E3;font-size:18px">嗨,' . $parent_comment->comment_author . ',你在<a href="' . $post_link . '" style="text-decoration: underline;color: #278DBC;">《' . $post_title . '》</a>中的评论有了回复</p>'; $message .= '<p style="padding: 10px;color:#444;"><span style="display: block;padding-bottom: 15px;color: #aaa;">' . $comment->comment_author . '给你的回复:</span>“' . $comment->comment_content . '”</p>'; $message .= '<p style="border-top: 2px solid #20A3CC;padding: 10px;"><span style="color: #aaa;padding-bottom: 15px;display: block;">你的评论:</span>“' . $parent_comment->comment_content . '”</p>'; $message .= '<p><a href="' . $comment_link . '" style="font-style: oblique;color: #278DBC;text-decoration: underline;">查看详细</a></p><p style="color: #f00;font-size: 12px;">PS:此邮件由系统自动发送,请勿回复!</p>'; $message .= '<p><a style="font-size: 12px;" title="前往首页" href="' . home_url () . '">' . $blog_name . '</a></p></div>'; @wp_mail ( $to_email, $subject, $message, $headers ); // 执行wp_mail函数,可以用php的mail函数或smtp来触发执行wp_mail函数 } } // 下面这个if判断是为后台设置而准备的。 if (inlo_options ( 'is_email_msg' ) == 'Y') { $to_email = get_bloginfo ( 'admin_email' ); $subject = $blog_name . '上有了新的评论'; $message = '<div style="width:800px;padding:10px 20px;font-family: 微软雅黑;color: #777;background-color: #fafafa;border: 1px solid #e3e3e3;border-top: 4px solid #1e8cbe;">'; $message .= '<p style="padding-bottom: 10px;border-bottom: 1px solid #E3E3E3;font-style: oblique;"><a href="' . $post_link . '" style="text-decoration: none;color: #278DBC;">《' . $post_title . '》</a>有新的评论</p>'; $message .= '<p style="padding: 10px;color:#444;"><span style="display: block;padding-bottom: 15px;color: #aaa;">' . $comment->comment_author . '的评论:</span>“' . $comment->comment_content . '”</p>'; $message .= '<p><a href="' . $comment_link . '" style="font-style: oblique;color: #278DBC;text-decoration: underline;">查看详细</a></p>'; $message .= '</div>'; @wp_mail ( $to_email, $subject, $message, $headers ); } return $comment_id; }
comments.php里面需要添加的构件
一个是真实的开关,是隐藏的input表单,必须放在form表单之内
<input type="hidden" name="reply_mail_notify" id="reply_mail_notify" value="Y" />
另一个是虚假的开关,是显示出来给访客点击选择的这个也为了下面的js控制而准备,可以放在提交按钮旁边
<span class="mail_notify_box<?php echo ' mail_on' ; ?>" id="mail_notify_box" title="是否接收评论回复邮件通知"></span>
虚假开关的CSS样式
采用fa字体图标
.comment-form-submit .mail_notify_box:before{font-family:'FontAwesome';content:"\f003";font-size:20px;color:#ccc} .comment-form-submit .mail_on:before{font-family:'FontAwesome';content:"\f0e0";font-size:20px;color:#737f99}
JS控制两个开关
// 邮件回复 $('#main').on('click','#mail_notify_box', // #main改为对应的容器id function() { if( $(this).hasClass('mail_on') ){ // 若存在mail_on类 $(this).removeClass('mail_on'); // 则移除mail_on类(即移除了css样式-邮件图标变暗) $('#reply_mail_notify').val(''); // 设置input表单的值为空(即不触发发送邮件函数) } else { // 若不存在mail_on类 $(this).addClass('mail_on'); // 则添加mail_on类 (即添加css样式-邮件图标变亮) $('#reply_mail_notify').val('Y'); // 设置input表单的值为Y(即触发发送邮件函数) } });
完成以上步骤就OK了。而且这个邮件回复不需要在commernts.php里面加这两句代码:
<?php comment_id_fields(); ?> <?php do_action( 'comment_form', $post->ID ); ?>
基本的触发流程在此解释一下:开关有两个通过js来控制,访客点击邮件图标开关,js就会控制它变亮/变淡,与此同时会为另一个真实隐藏的input开关填值:空/Y,functions.php里面自定义的inlo_reply_mail_notify()函数会根据input的值来判断是否发送邮件,input表单为空则不发送,为Y则发送。That's All .
本站文章除注明转载/出处外,均为本站原创或翻译。若要转载但请务必注明出处,尊重他人劳动成果。
转载请注明出处链接 : https://www.inlojv.com/4497.html