»

修补WordPress评论中的回复漏洞

    WordPress网络安全  
又拍云CDN缓存cookiesApacheweb.config网络安全WordPress插件插件FAQ建站客户申请状态网站优化浏览器访客网站镜像CDN工作IISCDN的问题windows主机访问防盗链爬虫wordpress

前一篇文章我讲了使用 WP-Mail-SMTP 插件后,管理员回复读者的评论,读者收不到邮件提醒的问题。主要是因为该插件为了防止垃圾邮件产生,默认只给管理员发邮件,不能给非管理员发邮件。如果我们解禁了此限制,那么问题又来了:谁都可以给你文章评论下的评论者发邮件啊,一些无聊的人就会乱发垃圾邮件骚扰你文章的正常评论者,本着对读者负责的态度,这种事情是不允许发生的的。

 

1-wordpress-comments-administrator-identifier

 

所以需要进一步设置:新读者回复给已评论的人后,只有通过管理员审核,才能向已评论者发邮件回复通知。这样就过滤了垃圾邮件对已评论者的骚扰。

露兜博客介绍了其修改的代码,我觉得很实用,就借花献佛了。顺便改了一下模板样式。如果你是用知更鸟的 Begin 主题,可以直接把主题目录下的 notify.php 文件同名替换(有些地方注意修改成自己的博客地址)。以下是经过润色的代码和一些解释:

  1. / ** 
  2.  * WordPress评论回复邮件提醒防垃圾评论版 
  3.  * 根据原作者 露兜 https://www.ludou.org/ 的代码略有修改 
  4.  * /  
  5.   
  6. function ludou_comment_mail_notify($comment_id$comment_status) {  
  7.   // 评论必须经过审核才会发送通知邮件  
  8.   if ( $comment_status !== 'approve' && $comment_status !== 1 )  
  9.     return;  
  10.     
  11.   $comment = get_comment($comment_id);  
  12.   
  13.   if ( $comment->comment_parent != '0' ) {  
  14.     $parent_comment = get_comment($comment->comment_parent);  
  15.   
  16.     // 邮件接收者email        
  17.     $to = trim($parent_comment->comment_author_email);  
  18.       
  19.     // 邮件标题  
  20.     $subject = '您在博客 [' . get_option("blogname") . '] 的留言有了新的回复';  
  21.   
  22.    // 邮件内容,自行修改,支持HTML
  23.     $message = '  
  24. <table cellpadding="0" cellspacing="0" style="font-family: 微软雅黑,verdana, arial; margin: 0 auto; width: 100%;">  
  25.     <tbody>  
  26.         <tr>  
  27.             <td style="background: #08c; color: #fff; font-family: 微软雅黑,verdana, arial; font-size:15px;line-height: 35px;"><strong>&nbsp; 您在博客 [' . get_option("blogname") . '] 的留言有了新的回复:</strong></td>  
  28.         </tr>  
  29.         <tr>  
  30.             <td style="border: solid 1px #ccc; font-size: 13px; line-height: 180%; padding: 20px;"><span style="color: rgb(186, 76, 50); font-family:微软雅黑, verdana, arial; line-height: 23.3999996185303px;"> ' . $parent_comment->comment_author . '</span>, 您好!  
  31.             <p>您曾在<span style="color:#ba4c32;">《' . get_the_title($comment->comment_post_ID) . '》</span>一文中的留言:</p>  
  32.             <blockquote style="width: 94%;color: #8b8b8b;margin: 0 auto;padding: 10px;clear: both;border: 1px solid #ebebeb;">  
  33.             <p>' . $parent_comment->comment_content . '</p>  
  34.             </blockquote>  
  35.                 <p><span style="color:#ba4c32;">' . $comment->comment_author . ' </span> 给你的回复:</p>  
  36.             <blockquote style="width: 94%;color: #8b8b8b;margin: 0 auto;padding: 10px;clear: both;border: 1px solid #ebebeb;">  
  37.                 <p>' . $comment->comment_content . ' </p>  
  38.             </blockquote>  
  39.             <p style="padding: 5px;">您可以 <a href="' . htmlspecialchars(get_comment_link($comment->comment_parent)) . '">点此查看回复完整內容</a></p>  
  40.             <p style="padding: 5px;">欢迎您再度光临 <a href="'.home_url().'">' . get_option('blogname') . '</a>的博客。</p>  
  41.             </td>  
  42.         </tr>  
  43.         <tr>  
  44.             <td style="color: rgb(255, 255, 255); font-size: 12px; line-height: 21.6000003814697px; padding: 10px; background: rgb(51, 51, 51);">请注意:此邮件由&nbsp;<a href="https://www.timezls.com" target="_blank" title="时光在路上">时光在路上</a>&nbsp;的博客自动发送,请勿直接回复。<br />如果此邮件不是您请求的,请忽略并删除!</td>  
  45.         </tr>  
  46.     </tbody>  
  47. </table>  ';  
  48.   
  49.     $message_headers = "Content-Type: text/html; charset=" . get_option('blog_charset') . "\n";  
  50.       
  51.     // 不用给不填email的评论者和管理员发提醒邮件  
  52.     if$to != '' && $to != get_bloginfo('admin_email') )  
  53.       @wp_mail($to$subject$message$message_headers);  
  54.   }  
  55. }  
  56.   
  57. // 编辑和管理员的回复直接发送提醒邮件,因为编辑和管理员的评论不需要审核  
  58. add_action('comment_post', 'ludou_comment_mail_notify', 20, 2);  
  59.   
  60. // 普通访客发表的评论,等博主审核后再发送提醒邮件  
  61. add_action('wp_set_comment_status', 'ludou_comment_mail_notify', 20, 2);  

本文禁止住转载。任何形式转载请联系作者(时光在路上 www.timezls.com)。时光在路上保留所有权利

时光在路上扫码阅读、分享
  • 版权声明:该文章由 时光在路上 发表,共 3361字。除非特别标注来源,否则为原创。详见《版权声明》部分。
  • 转载请注明:文章标题和文章链接 - 时光在路上 - 也可直接“复制本文链接” 或 使用右边二维码分享本文 →