本站用了一款名为子比的Wordpress主题,它的官方slogan如下:
Zibll 子比主题专为博客、自媒体、资讯类的网站设计开发,采用简约优雅的设计风格让网站更具美感,创新的前端模块化功能配置和全面的前端用户功能,以及快捷的支付功能,使子比主题成为更适合现代化网站的优雅主题!
经过将近一年的使用整体感觉还算不错,但是很多功能我都用不到,我想用的功能却没有,例如最基础的访客头像、评论框网址、点击用户名跳转,曾经希望作者能够将这些功能集成到主题中免得我自己修改麻烦,但是反馈之后被否了,最根本的原因在于这些功能是作者故意去掉的,使其更加契合资源站的定位。
目前这些缺失功能在使用过程中都逐个解决了,事后也对其进行了整理,有需要的朋友可以直接拿去使用。
子比主题评论区添加网址填写框 - 登山亦有道 (chenyan98.cn)
子比主题使用Cravatar代替原有头像 - 登山亦有道 (chenyan98.cn)
很早就在主题中设置了SMTP邮件发送功能,但最近博客间互动较多经常有博友反馈我的博客没有回复评论邮件,由于我自己能收到邮件,博友林羽凡也能收到邮件所以这件事情就被我有意无意的忽略了,昨天博友龙笑天又提到了这件事情,我便去发送邮件的QQ邮箱中查看了一下,一看不要紧,一看吓一跳,已发邮件只有我和林羽凡,看了看都是QQ邮箱便以为是域名邮箱的原因,进行BUG反馈得到作者的回复之后才知道:未注册登录的用户统统不发邮件,这是主题的设定
QQ和作者交谈想询问是否能提供一个解决方案,得到了如下回复。
没办法,只能自己折腾了,自己知道问题大概出在哪但是不知道怎么改,抱着试试看的态度就把问题发到了一个群里,刚好博友龙笑天 也在,早在2016年他就整理出了一篇很详细的文章。
免插件仅代码实现WordPress评论回复邮件提醒(另附清新简洁样式模版) - 龙笑天下 (ilxtx.com)
在折腾过程中选择了文章中美化版评论回复提醒邮件样式,由于使用了主题自带的SMTP发送邮件,这个模板被套上了主题自带的样式,看起来很是滑稽,原文中有针对这些模板的详细说明我这边就不再赘述了。
子比主题自带的评论审核模板样式还算可以,为了保持一致性就决定两者结合,把原来邮件模板的语序重新调整并使用上边可用的函数对评论者姓名、评论内容、评论时间、回复等信息进行调用最终得到了如下代码:
//访客评论邮件回复
add_action('comment_post', 'comment_mail_notify', 99);
add_action('comment_unapproved_to_approved', 'comment_mail_notify', 99);
function comment_mail_notify($comment_id) {
$comment = get_comment($comment_id);
if ($comment->comment_approved != '1') return;//如果评论未通过审核,return
$admin_email = get_bloginfo ('admin_email'); // $admin_email 可改为你指定的 e-mail.
$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)) {
/* 上面的if判断是决定是否发出邮件的关键:
($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
$to = trim(get_comment($parent_id)->comment_author_email);
$subject = '您在 [' . get_option("blogname") . '] 的留言有了新的回复';//邮件主题
$message = '您好!' . trim(get_comment($parent_id)->comment_author) . ',';//邮件内容
$message .= '您于'. trim(get_comment($parent_id)->comment_date) . ' ';
$message .= '在《' . get_the_title($comment->comment_post_ID) . '》中发表评论:' . '</br>';
$message .= '<div style="padding: 10px 15px; border-radius: 8px; background: rgba(141, 141, 141, 0.05); line-height: 1.7;">' . nl2br(get_comment($parent_id)->comment_content) . '</div>';
$message .= '</br>';
$message .= '' . trim($comment->comment_author) . '';
$message .= ' 于'. trim($comment->comment_date) . ' 给您的回复如下:</br>';
$message .= '<div style="padding: 10px 15px; border-radius: 8px; background: rgba(141, 141, 141, 0.05); line-height: 1.7;">' . nl2br($comment->comment_content) . '</div>';
$message .= '</br>';
$message .= '您可以点击下方按钮查看回复内容</br>';
$message .= '<a target="_blank" style="margin-top: 20px;padding:5px 20px" class="but jb-blue" href="' . htmlspecialchars(get_comment_link($parent_id)) . '">查看回复</a>' . "</br>";
$from = "From: \"" . get_option('blogname') . "\" <$wp_email>";
$headers = "$from\nContent-Type: text/html; charset=" . get_option('blog_charset') . "\n";
//wp_mail发送邮件
wp_mail( $to, $subject, $message, $headers );
}
}
将此代码放在主题根目录的functions.php即可,为了不产生多余的邮件主题设置里边的发送邮件被我全部关闭了,经过测试目前这种方案能够覆盖所有评论场景,很完美,最终效果图这里就不放了,毕竟以后每次回复评论都能看到
PS:代码中加上 && ($to != $admin_email) 这个判断条件一个邮件都发不出去,正常只是不发给 admin,搞不懂,删掉算了多一个邮件就多一个吧。。。忘了先定义后使用
作者:晨岩
本站所有文章除特别声明外,均采用 BY-NC-SA 4.0 许可协议。转载请注明出处!