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循环输出数据库内容的代码
May 24 PHP
php代码运行时间查看类代码分享
Aug 06 PHP
PHP数据库调用类调用实例(详细注释)
Jul 12 PHP
PHP实现数组递归转义的方法
Aug 28 PHP
thinkphp3.0输出重复两次的解决方法
Dec 19 PHP
PHP 中 Orientation 属性判断上传图片是否需要旋转
Oct 16 PHP
PHP实现可精确验证身份证号码的工具类示例
May 31 PHP
PHP单例模式模拟Java Bean实现方法示例
Dec 07 PHP
总结PHP中初始化空数组的最佳方法
Feb 13 PHP
PHP切割整数工具类似微信红包金额分配的思路详解
Sep 18 PHP
PHP code 验证码生成类定义和简单使用示例
May 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中的MVC模式运用技巧
2007/05/03 PHP
smarty内置函数capture用法分析
2015/01/22 PHP
IE6不能修改NAME问题的解决方法
2010/09/03 Javascript
jquery动态增加删除表格行的小例子
2013/11/14 Javascript
jQuery ajax应用总结
2016/06/02 Javascript
Vue项目从webpack3.x升级webpack4不完全指南
2019/04/28 Javascript
JS浏览器BOM常见操作实例详解
2020/04/27 Javascript
JS实现简单贪吃蛇小游戏
2020/10/28 Javascript
[10:04]国际邀请赛采访专栏:DK.Farseer,mouz.Black^,采访员Josh专访
2013/08/05 DOTA
Python中的hypot()方法使用简介
2015/05/18 Python
详解Python中的Cookie模块使用
2015/07/06 Python
python删除特定文件的方法
2015/07/30 Python
Python爬取qq music中的音乐url及批量下载
2017/03/23 Python
Django中自定义模型管理器(Manager)及方法
2019/09/23 Python
TensorFlow MNIST手写数据集的实现方法
2020/02/05 Python
python 实现在shell窗口中编写print不向屏幕输出
2020/02/19 Python
在pytorch中实现只让指定变量向后传播梯度
2020/02/29 Python
详解python datetime模块
2020/08/17 Python
python自动生成sql语句的脚本
2021/02/24 Python
解决PDF 转图片时丢文字的一种可能方式
2021/03/04 Python
CSS3中的Media Queries学习笔记
2016/05/23 HTML / CSS
Priority Pass机场贵宾室会籍计划:全球超过1200间机场贵宾室
2018/08/26 全球购物
毕业生就业自荐信
2013/12/04 职场文书
办公室内勤岗位职责范本
2013/12/09 职场文书
大学生职业生涯规划书范文
2014/01/04 职场文书
水利公司纪检监察自我鉴定
2014/02/25 职场文书
婚前财产公证书
2014/04/10 职场文书
学校三节实施方案
2014/06/09 职场文书
乡镇安全生产目标责任书
2014/07/23 职场文书
2014年国庆节演讲稿精选范文1500字
2014/09/25 职场文书
2014年电工工作总结
2014/11/20 职场文书
2015学生会文艺部工作总结
2015/04/03 职场文书
《这片土地是神圣的》教学反思
2016/02/16 职场文书
2016年质量月活动总结报告
2016/04/05 职场文书
Lombok的详细使用及优缺点总结
2021/07/15 Java/Android
Golang 并发下的问题定位及解决方案
2022/03/16 Golang