任我处置|WordPress去除重复评论的限制

前言:

文章开始之前,也提醒一下,除非是你真这么想,还是可以考虑去除重复评论的限制的。不过呢,毕竟就这个点来说,WordPress更多的应该是出自抵挡垃圾评论的考虑。
WordPress不允许同一用户在同一篇文章发布内容重复的评论,可以防止用户错误的点击提交按钮多次,防止没耐心等待审核的用户提交多次评论,也能防止一部分spam评论。但有时候我们真的很需要写重复的评论,怎么办!

这儿是代码:

去除重复评论限制的方法

检测WordPress重复评论的函数是wp_allow_comment(),代码不难懂

  1. if ( $wpdb->get_var($dupe) ) {
  2.     do_action( ‘comment_duplicate_trigger’, $commentdata );
  3.     if ( defined(‘DOING_AJAX’) )
  4.         die( __(‘Duplicate comment detected; it looks as though you’ve already said that!’) );
  5.     wp_die( __(‘Duplicate comment detected; it looks as though you’ve already said that!’) );
  6. }

虽然提供了一个action:comment_duplicate_trigger,但我无法通过一个action为函数提供返回值,所以用这个action不能改变运行结果。

网上提到的方法基本都是,直接注释掉上面那段代码,我不是很喜欢。一来,这要修改核心文件;二来,我并不希望所有用户都能发重复评论,只想给自己一点特权。

用google搜索了半天,终于发现一个我满意的方法,代码来自Stranger Studio,原文链接请看本文结尾。

方法的思路:

  • 审核评论之前,给评论添加随机字符串,这里用md5(time()),这样就不会被定为重复评论
  • 审核通过并存储后,更新评论,去掉随机字符串

非常聪明的想法!代码如下,加到functions.php中或者做成插件均可

  1. function enable_duplicate_comments_preprocess_comment($comment_data)
  2. {
  3.     //add some random content to comment to keep dupe checker from finding it
  4.     $random = md5(time());
  5.     $comment_data[‘comment_content’] .= “disabledupes{“ . $random . “}disabledupes”;
  6.     return $comment_data;
  7. }
  8. add_filter(‘preprocess_comment’, ‘enable_duplicate_comments_preprocess_comment’);
  9. function enable_duplicate_comments_comment_post($comment_id)
  10. {
  11.     global $wpdb;
  12.     //remove the random content
  13.     $comment_content = $wpdb->get_var(“SELECT comment_content FROM $wpdb->comments WHERE comment_ID = ‘$comment_id’ LIMIT 1”);
  14.     $comment_content = preg_replace(“/disabledupes\{.*\}disabledupes/”“”$comment_content);
  15.     $wpdb->query(“UPDATE $wpdb->comments SET comment_content = ‘” . $wpdb->escape($comment_content) . “‘ WHERE comment_ID = ‘$comment_id’ LIMIT 1”);
  16.     /*
  17.         add your own dupe checker here if you want
  18.     */
  19. }
  20. add_action(‘comment_post’, ‘enable_duplicate_comments_comment_post’);

用上面的代码,可以允许所有人重复评论。

如果只允许管理员评论,可以这样干(functions.php中)

  1. if( current_user_can(‘administrator’) ) {
  2.     add_filter(‘preprocess_comment’, ‘enable_duplicate_comments_preprocess_comment’);
  3.     add_action(‘comment_post’, ‘enable_duplicate_comments_comment_post’);
  4. }
  5. function enable_duplicate_comments_preprocess_comment($comment_data)
  6. {
  7.     //add some random content to comment to keep dupe checker from finding it
  8.     $random = md5(time());
  9.     $comment_data[‘comment_content’] .= “disabledupes{“ . $random . “}disabledupes”;
  10.     return $comment_data;
  11. }
  12. function enable_duplicate_comments_comment_post($comment_id)
  13. {
  14.     global $wpdb;
  15.     //remove the random content
  16.     $comment_content = $wpdb->get_var(“SELECT comment_content FROM $wpdb->comments WHERE comment_ID = ‘$comment_id’ LIMIT 1”);
  17.     $comment_content = preg_replace(“/disabledupes\{.*\}disabledupes/”“”$comment_content);
  18.     $wpdb->query(“UPDATE $wpdb->comments SET comment_content = ‘” . $wpdb->escape($comment_content) . “‘ WHERE comment_ID = ‘$comment_id’ LIMIT 1”);
  19.     /*
  20.         add your own dupe checker here if you want
  21.     */
  22. }

参考文章

Duplicate comment detected; it looks as though you’ve already said that!

写在后面:

因人而异吧,如果你都看到这一句了,基本上是决定解除重复评论的限制了啦。

本文参考于 http://www.solagirl.net/wordpress-allow-duplicate-comments.html  ,若有任何来源问题,请联系QQ:1516677079 及时更正。

最有意思的设计站点


最好的UI素材库

我们极力推荐: