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版
Oct 09 PHP
php在线打包程序源码
Jul 27 PHP
PHP 木马攻击防御技巧
Jun 13 PHP
PHP array_multisort()函数的使用札记
Jul 03 PHP
PHP乱码问题,UTF-8乱码常见问题小结
Apr 09 PHP
php像数组一样存取和修改字符串字符
Mar 21 PHP
PHP中使用FFMPEG获取视频缩略图和视频总时长实例
May 04 PHP
PHP开发中常用的十个代码样例
Feb 02 PHP
PHP链表操作简单示例
Oct 15 PHP
在laravel中使用Symfony的Crawler组件分析HTML
Jun 19 PHP
PHP设计模式之适配器模式原理与用法分析
Apr 25 PHP
php实现微信支付之现金红包
May 30 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
重量级动漫纷纷停播!唯独OVERLORD第四季正在英魂之刃继续更新
2020/05/06 日漫
php批量删除数据
2007/01/18 PHP
PHP统计nginx访问日志中的搜索引擎抓取404链接页面路径
2014/06/30 PHP
微信公众号OAuth2.0网页授权问题浅析
2017/01/21 PHP
thinkPHP实现基于ajax的评论回复功能
2018/06/22 PHP
PHP实现的AES加密、解密封装类与用法示例
2018/08/02 PHP
swoole_process实现进程池的方法示例
2018/10/29 PHP
PHP里的$_GET数组介绍
2019/03/22 PHP
php 的多进程操作实践案例分析
2020/02/28 PHP
Jquery ajax执行顺序 返回自定义错误信息(实例讲解)
2013/11/06 Javascript
三种动态加载js的jquery实例代码另附去除js方法
2014/04/30 Javascript
Extjs Label的 fieldLabel和html属性值对齐的方法
2014/06/15 Javascript
基于JavaScript实现TAB标签效果
2016/01/12 Javascript
jQuery链式调用与show知识浅析
2016/05/11 Javascript
基于twbsPagination.js分页插件使用心得(分享)
2017/10/21 Javascript
js阻止默认右键的下拉菜单方法
2018/01/02 Javascript
vue实现验证码按钮倒计时功能
2018/04/10 Javascript
Angular 封装并发布组件的方法示例
2018/04/19 Javascript
微信小程序列表中item左滑删除功能
2018/11/07 Javascript
vue-router启用history模式下的开发及非根目录部署方法
2018/12/23 Javascript
详解在网页上通过JS实现文本的语音朗读
2019/03/28 Javascript
Vue(定时器)解决mounted不能获取到data中的数据问题
2020/07/30 Javascript
[06:36]吞吞映像top1
2014/06/20 DOTA
一个月入门Python爬虫学习,轻松爬取大规模数据
2018/01/03 Python
python Pandas如何对数据集随机抽样
2019/07/29 Python
python lambda表达式(匿名函数)写法解析
2019/09/16 Python
python实现银行管理系统
2019/10/25 Python
唤醒头发毛囊的秘密武器:Grow Gorgeous
2016/08/28 全球购物
DHC美国官网:日本通信销售第一的化妆品品牌
2017/11/12 全球购物
什么是用户模式(User Mode)与内核模式(Kernel Mode) ?
2014/07/21 面试题
小加工厂管理制度
2014/01/21 职场文书
工程建设实施方案
2014/03/14 职场文书
家长对老师的评语
2014/04/18 职场文书
详细分析PHP7与PHP5区别
2021/06/26 PHP
Java 实现限流器处理Rest接口请求详解流程
2021/11/02 Java/Android
win10此电脑打不开怎么办 win10双击此电脑无响应的解决办法
2022/07/23 数码科技