WordPress中限制非管理员用户在文章后只能评论一次


Posted in PHP onDecember 31, 2015

之前有网友提出,在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);

这里没有限制管理员的评论次数,那我们顺带着看一下判断用户是否为管理员的方法:

判断指定id的用户是不是管理员

该需求实现起来非常简单,几行代码搞定,分享一下:

function ludou_is_administrator($user_id) {
 $user = get_userdata($user_id);
 if(!empty($user->roles) && in_array('administrator', $user->roles))
  return 1; // 是管理员
 else
  return 0; // 非管理员
}

判断当前登录用户是不是管理员

如果是判断当前登录用户是不是管理员,可以使用下面的函数:

function ludou_is_administrator() {
 // wp_get_current_user函数仅限在主题的functions.php中使用
 $currentUser = wp_get_current_user();

 if(!empty($currentUser->roles) && in_array('administrator', $currentUser->roles)) 
  return 1; // 是管理员
 else
  return 0; // 非管理员
}
PHP 相关文章推荐
PHP4实际应用经验篇(7)
Oct 09 PHP
PHP isset()与empty()的使用区别详解
Aug 29 PHP
php中显示数组与对象的实现代码
Apr 18 PHP
PHP中空字符串介绍0、null、empty和false之间的关系
Sep 25 PHP
PHP 二维数组根据某个字段排序的具体实现
Jun 03 PHP
php中mysql操作buffer用法详解
Mar 19 PHP
PHP回溯法解决0-1背包问题实例分析
Mar 23 PHP
纯PHP代码实现支付宝批量付款
Dec 24 PHP
PHP中strcmp()和strcasecmp()函数字符串比较用法分析
Jan 07 PHP
php preg_match的匹配不同国家语言实例
Dec 29 PHP
laravel框架之数据库查出来的对象实现转化为数组
Oct 23 PHP
浅谈laravel aliases别名的原理
Oct 24 PHP
php实现微信公众号主动推送消息
Dec 31 #PHP
php创建桌面快捷方式实现方法
Dec 31 #PHP
开启PHP的伪静态模式
Dec 31 #PHP
thinkphp多层MVC用法分析
Dec 30 #PHP
thinkphp命名空间用法实例详解
Dec 30 #PHP
详解PHP中的null合并运算符
Dec 30 #PHP
thinkPHP导出csv文件及用表格输出excel的方法
Dec 30 #PHP
You might like
无数据库的详细域名查询程序PHP版(5)
2006/10/09 PHP
snoopy PHP版的网络客户端提供本地下载
2008/04/15 PHP
详解PHP中的Traits
2015/07/29 PHP
js关于字符长度限制的问题示例探讨
2014/01/24 Javascript
QQ空间顶部折页撕开效果示例代码
2014/06/15 Javascript
javascript中数组的定义及使用实例
2015/01/21 Javascript
对JavaScript的全文搜索实现相关度评分的功能的方法
2015/06/24 Javascript
JS+DIV+CSS实现的经典标签切换效果代码
2015/09/14 Javascript
异步JS框架的作用以及实现方法
2015/10/29 Javascript
JS实现简单的二维矩阵乘积运算
2016/01/26 Javascript
Jquery组件easyUi实现选项卡切换示例
2016/08/23 Javascript
Vue中v-show添加表达式的问题(判断是否显示)
2018/03/26 Javascript
使用Node.js写一个代码生成器的方法步骤
2019/05/10 Javascript
Node.js之删除文件夹(含递归删除)代码实例
2019/09/09 Javascript
Electron+vue从零开始打造一个本地播放器的方法示例
2020/10/27 Javascript
vue watch监控对象的简单方法示例
2021/01/07 Vue.js
[47:08]OG vs INfamous 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
[01:02:47]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
Python中的Numpy入门教程
2014/04/26 Python
Python中正则表达式详解
2017/05/17 Python
详解用python实现简单的遗传算法
2018/01/02 Python
详解python字节码
2018/02/07 Python
Flask web开发处理POST请求实现(登录案例)
2018/07/26 Python
Python面向对象之类和对象实例详解
2018/12/10 Python
使用python opencv对目录下图片进行去重的方法
2019/01/12 Python
Python3 使用pillow库生成随机验证码
2019/08/26 Python
基于HTML5+tracking.js实现刷脸支付功能
2020/04/16 HTML / CSS
Melissa香港官网:MDreams
2016/07/01 全球购物
Hotels.com泰国:酒店预订网站
2019/11/20 全球购物
应届生保险求职信
2013/11/11 职场文书
运动会解说词50字
2014/01/18 职场文书
面试后感谢信
2014/02/01 职场文书
洗发露广告词
2014/03/14 职场文书
2015年世界无烟日活动总结
2015/02/10 职场文书
2015年医生个人工作总结
2015/04/25 职场文书
小学生一年级(书信作文)
2019/08/13 职场文书