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 相关文章推荐
PHP 数据库树的遍历方法
Feb 06 PHP
php的chr和ord函数实现字符加减乘除运算实现代码
Dec 05 PHP
PHP常用的文件操作函数经典收藏
Apr 02 PHP
深入PHP获取随机数字和字母的方法详解
Jun 06 PHP
PHP中imagick函数的中文解释
Jan 21 PHP
PHP aes (ecb)解密后乱码问题
Jun 22 PHP
最新制作ThinkPHP3.2.3完全开发手册
Nov 23 PHP
PHP控制前台弹出对话框的实现方法
Aug 21 PHP
php reset() 函数指针指向数组中的第一个元素并输出实例代码
Nov 21 PHP
PHP正则匹配操作简单示例【preg_match_all应用】
Jul 10 PHP
PHP双向链表定义与用法示例
Jan 31 PHP
asp函数split()对应php函数explode()
Feb 27 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语法(3)
2006/10/09 PHP
php反射应用示例
2014/02/25 PHP
jquery获取复选框被选中的值
2014/04/10 Javascript
javascript使用call调用微信API
2014/12/15 Javascript
javascript实现随时变化着的背景颜色
2015/04/02 Javascript
jQuery焦点图切换特效代码分享
2015/09/15 Javascript
jQuery实时显示鼠标指针位置和键盘ASCII码
2016/03/28 Javascript
基于 Vue.js 之 iView UI 框架非工程化实践记录(推荐)
2017/11/21 Javascript
浅谈Fetch 数据交互方式
2018/12/20 Javascript
vue中的mvvm模式讲解
2019/01/31 Javascript
JS拖拽排序插件Sortable.js用法实例分析
2019/02/20 Javascript
解决vue 使用setTimeout,离开当前路由setTimeout未销毁的问题
2020/07/21 Javascript
在vue中使用el-tab-pane v-show/v-if无效的解决
2020/08/03 Javascript
解决vue组件没显示,没起作用,没报错,但该显示的组件没显示问题
2020/09/02 Javascript
零基础写python爬虫之urllib2使用指南
2014/11/05 Python
Python实现的tab文件操作类分享
2014/11/20 Python
Python 出现错误TypeError: ‘NoneType’ object is not iterable解决办法
2017/01/12 Python
Django中使用celery完成异步任务的示例代码
2018/01/23 Python
flask框架使用orm连接数据库的方法示例
2018/07/16 Python
快速解决vue.js 模板和jinja 模板冲突的问题
2019/07/26 Python
python Django 创建应用过程图示详解
2019/07/29 Python
使用Python对Dicom文件进行读取与写入的实现
2020/04/20 Python
HTML5 新事件 小结
2009/07/16 HTML / CSS
Roots加拿大官网:加拿大休闲服饰品牌
2016/10/24 全球购物
加拿大百叶窗和窗帘定制网站:Blinds
2017/01/30 全球购物
Lou & Grey美国官网:主打舒适性面料服饰
2017/12/21 全球购物
印尼在线购买隐形眼镜网站:Lensza.co.id
2019/04/27 全球购物
绝对经典成功的大学生推荐信
2013/11/08 职场文书
大专应届生个人的自我评价
2013/11/21 职场文书
升职自荐书范文
2013/11/28 职场文书
往来会计岗位职责
2013/12/19 职场文书
探亲假请假条
2014/04/11 职场文书
师范生求职自荐信
2014/06/14 职场文书
药店促销活动策划方案
2014/08/24 职场文书
教师党员个人自我评价
2015/03/04 职场文书
汽车质检员岗位职责
2015/04/08 职场文书