WordPress中实现每篇文章只允许用户评论一次
日期:
标签:WordPress教程
如需帮忙改代码,或者WordPress二次开发、PHP网站建设等需求,可联系我购买付费服务: 点此联系我
之前有网友提出,在WordPress中有没有办法实现每篇文章只允许用户评论一次?
暂不说这个需求有没有用,毕竟WordPress就是给有各种需求的人用的。这个功能实现起来也比较简单,只需每次用户发表的评论进数据库之前,从当前文章的所有评论中查找是否有相同的用户名或邮箱已经发表过评论,如果有就跳到错误页面即可。
实现代码,放到当前主题的functions.php中即可(这里还增加了对IP的判断,更保险):
// 获取评论用户的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中判断用户是不是管理员
-- 完 --
本文采用 「CC BY-NC-SA 4.0」创作共享协议,转载请标注以下信息:
原文出处:露兜即刻 https://www.ludou.org/wordpress-only-allow-comment-once-per-post.html
嚓,好另类的需求……
真有这么奇葩的需求啊
除非是恶意灌水,要不然应该都不会要这样的需求吧
还没折腾够的节奏…
对于某些文章和防止垃圾评论还是很有效果的哈!
竟然只允许只评论一次,太另类了!递归用不上了。
实在抱歉,自从月初换了cms布局后需要大量文章填充内容,而自己写的那些文章不够,所以转载了贵站这篇文章,并且已注明了出处!
请问你的空间是国内的还是国外的?能推荐下吗?
@@@hmf 抱歉,不推荐空间
你的评论系统是不需要登录的,挺好的,挺实用。
看备案号博主是海南的?
@松 竟然和露兜大神同城!
@PCDotFan 幸会幸会!
我说前面为什么要判断是不是管理员,不过这需求确实够奇葩
我想知道,用那种比较好点。
有个问题就是如果网站开启了CDN,wp获取到的是CDN分配的IP这样会不会乱杀无辜呢。
这个功能我是用不上了,因为我希望自己的博客评论多些才好,可以显得热热闹闹些!
可以举一反三,每篇文章限制评论个数啊。很不错!
感谢分享!!!!!!!