贝壳之家

WordPress中实现每篇文章只允许用户评论一次

评分 8.9, 满分 10 分 (12 票)
Loading...

之前有网友提出,在WordPress中有没有办法实现每篇文章只允许用户评论一次?

暂不说这个需求有没有用,毕竟WordPress就是给有各种需求的人用的。这个功能实现起来也比较简单,只需每次用户发表的评论进数据库之前,从当前文章的所有评论中查找是否有相同的用户名或邮箱已经发表过评论,如果有就跳到错误页面即可。

实现代码,放到当前主题的functions.php中即可(这里还增加了对IP的判断,更保险):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// 获取评论用户的ip,参考wp-includes/comment.php
function ludou_getIP() {
  $ip = $_SERVER['REMOTE_ADDR'];
  $ip = preg_replace( '/[^0-9a-fA-F:., ]/', '', $ip );
   
  return $ip;
}

function ludou_only_one_comment( $commentdata ) {
  global $wpdb;
  $currentUser = wp_get_current_user();
 
  // 不限制管理员发表评论
  if(empty($currentUser->roles) || !in_array('administrator', $currentUser->roles)) {
    $bool = $wpdb->get_var("SELECT comment_ID FROM $wpdb->comments WHERE comment_post_ID = ".$commentdata['comment_post_ID']."  AND (comment_author = '".$commentdata['comment_author']."' OR comment_author_email = '".$commentdata['comment_author_email']."' OR comment_author_IP = '".ludou_getIP()."') LIMIT 0, 1;");
 
    if($bool)
      wp_die('本站每篇文章只允许评论一次。<a href="'.get_permalink($commentdata['comment_post_ID']).'">点此返回</a>');
  }
 
  return $commentdata;
}
add_action( 'preprocess_comment' , 'ludou_only_one_comment', 20);

还记得前几天的教程吗?本文用到这里面的知识点哦:WordPress中判断用户是不是管理员

露兜
ourwindow@163.com

业余编程爱好者。

标签: WordPress
我要提问

17 条评论

点此留言
  1. 老杨

    嚓,好另类的需求……

  2. 路易大叔

    真有这么奇葩的需求啊

  3. boke112导航

    除非是恶意灌水,要不然应该都不会要这样的需求吧

  4. 灰常记忆

    还没折腾够的节奏…

  5. 美Win网

    对于某些文章和防止垃圾评论还是很有效果的哈!

  6. 忘想

    竟然只允许只评论一次,太另类了!递归用不上了。

  7. 君子不器

    实在抱歉,自从月初换了cms布局后需要大量文章填充内容,而自己写的那些文章不够,所以转载了贵站这篇文章,并且已注明了出处!

  8. @@hmf

    请问你的空间是国内的还是国外的?能推荐下吗?

  9. @@hmf

    你的评论系统是不需要登录的,挺好的,挺实用。

  10. 松

    看备案号博主是海南的?

  11. 猫加

    我说前面为什么要判断是不是管理员,不过这需求确实够奇葩

  12. 软海网

    我想知道,用那种比较好点。

  13. 黑苹果乐园

    有个问题就是如果网站开启了CDN,wp获取到的是CDN分配的IP这样会不会乱杀无辜呢。

  14. 我爱动感单车网

    这个功能我是用不上了,因为我希望自己的博客评论多些才好,可以显得热热闹闹些!

发表评论

评分 8.9, 满分 10 分 (12 票)
Loading...