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来检测proxy
Oct 09 PHP
php调用mysql存储过程
Feb 14 PHP
PHP中函数内引用全局变量的方法
Oct 20 PHP
PHP中用正则表达式清除字符串的空白
Jan 17 PHP
解析smarty 截取字符串函数 truncate的用法介绍
Jun 20 PHP
PHP定时执行任务实现方法详解(Timer)
Jul 30 PHP
WordPress中用于获取及自定义头像图片的PHP脚本详解
Dec 17 PHP
PHP中__autoload和Smarty冲突的简单解决方法
Apr 08 PHP
Laravel 5.4重新登录实现跳转到登录前页面的原理和方法
Jul 13 PHP
自写的利用PDO对mysql数据库增删改查操作类
Feb 19 PHP
Laravel框架实现超简单的分页效果示例
Feb 08 PHP
详解phpstorm2020最新破解方法
Sep 17 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桌面中心(二) 数据库写入
2007/03/11 PHP
php简单获取目录列表的方法
2015/03/24 PHP
PHP魔术方法的使用示例
2015/06/23 PHP
php实现的单一入口应用程序实例分析
2015/09/23 PHP
PHP生成各种常见验证码和Ajax验证过程
2016/01/10 PHP
通过源码解析Laravel的依赖注入
2018/01/22 PHP
javascript concat数组累加 示例
2009/09/03 Javascript
JS OOP包机制,类创建的方法定义
2009/11/02 Javascript
javascript 二维数组的实现与应用
2010/03/16 Javascript
五段实用的js高级技巧
2011/12/20 Javascript
javascript背景时钟实现方法
2015/06/18 Javascript
对象题目的一个坑 理解Javascript对象
2015/12/22 Javascript
jQuery实现div拖拽效果实例分析
2016/02/20 Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【一】
2016/05/10 Javascript
理解Angular的providers给Http添加默认headers
2017/07/04 Javascript
jquery手机触屏滑动拼音字母城市选择器的实例代码
2017/12/11 jQuery
vue代理和跨域问题的解决
2018/07/18 Javascript
bootstrap 日期控件 datepicker被弹出框dialog覆盖的解决办法
2019/07/09 Javascript
从Node.js事件触发器到Vue自定义事件的深入讲解
2020/06/26 Javascript
[57:16]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS VG第二场
2014/05/26 DOTA
python实现带验证码网站的自动登陆实现代码
2015/01/12 Python
python获取从命令行输入数字的方法
2015/04/29 Python
python生成验证码图片代码分享
2016/01/28 Python
python列表的常用操作方法小结
2016/05/21 Python
Python 爬虫学习笔记之正则表达式
2016/09/21 Python
python矩阵转换为一维数组的实例
2018/06/05 Python
python 解决tqdm模块不能单行显示的问题
2020/02/19 Python
加拿大快时尚零售商:Ardene
2018/02/14 全球购物
英国奢侈品概念店:Base Blu
2019/05/16 全球购物
德国最大的服装、鞋子和配件在线商店之一:Outfits24
2019/07/23 全球购物
如何写毕业求职自荐信
2013/11/06 职场文书
产品质量承诺书
2014/03/27 职场文书
2014年卫生工作总结
2014/11/27 职场文书
大学学生会主席竞选稿怎么写?
2019/08/19 职场文书
react 路由Link配置详解
2021/11/11 Javascript
Redis调用Lua脚本及使用场景快速掌握
2022/03/16 Redis