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可能遇到的问题“无法载入mysql扩展” 的解决方法
Apr 16 PHP
PHP优于Node.js的五大理由分享
Sep 15 PHP
深入分析php中接口与抽象类的区别
Jun 08 PHP
PHP5各个版本的新功能和新特性总结
Mar 16 PHP
php中使用getimagesize获取图片、flash等文件的尺寸信息实例
Apr 29 PHP
Linux下从零开始安装配置Nginx服务器+PHP开发环境
Dec 21 PHP
PHP实现微信网页授权开发教程
Jan 19 PHP
thinkphp3.x中display方法及show方法的用法实例
May 19 PHP
详解PHP用substr函数截取字符串中的某部分
Dec 03 PHP
php 函数使用可变数量的参数方法
May 02 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
Jul 22 PHP
php实现数组中出现次数超过一半的数字的统计方法
Oct 14 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中可能用来加密字符串的函数[base64_encode、urlencode、sha1]
2012/01/16 PHP
YII2框架中查询生成器Query()的使用方法示例
2020/03/18 PHP
js自带函数备忘 数组
2006/12/29 Javascript
JavaScript call apply使用 JavaScript对象的方法绑定到DOM事件后this指向问题
2011/09/28 Javascript
解析使用JS 清空File控件的路径值
2013/07/08 Javascript
js修改input的type属性问题探讨
2013/10/12 Javascript
js实现的复制兼容chrome和IE
2014/04/03 Javascript
js父页面与子页面不同时显示的方法
2014/10/16 Javascript
JQuery中的事件及动画用法实例
2015/01/26 Javascript
jQuery检测返回值的数据类型
2015/07/13 Javascript
学习JavaScript设计模式之模板方法模式
2016/01/20 Javascript
jQuery实现返回顶部功能
2016/02/23 Javascript
JS实现淡入淡出图片效果的方法分析
2016/12/20 Javascript
使用jQuery实现两个div中按钮互换位置的实例代码
2017/09/21 jQuery
Vue中render方法的使用详解
2018/01/26 Javascript
JS实现用特殊符号替换字符串的中间部分区域的实例代码
2018/07/24 Javascript
Angular PWA使用的Demo示例
2019/01/31 Javascript
JS前端知识点 运算符优先级,URL编码与解码,String,Math,arguments操作整理总结
2019/06/27 Javascript
Vuex 模块化使用详解
2019/07/31 Javascript
Python实现PS滤镜特效之扇形变换效果示例
2018/01/26 Python
全面分析Python的优点和缺点
2018/02/07 Python
详解python中init方法和随机数方法
2019/03/13 Python
python使用matplotlib画柱状图、散点图
2019/03/18 Python
python通过实例讲解反射机制
2019/10/17 Python
Python通过Tesseract库实现文字识别
2020/03/05 Python
Django中的AutoField字段使用
2020/05/18 Python
python em算法的实现
2020/10/03 Python
Selenium获取登录Cookies并添加Cookies自动登录的方法
2020/12/04 Python
美国Max仓库:Max Warehouse
2020/05/31 全球购物
施惠特软件测试面试题以及笔试题
2015/05/13 面试题
基层干部2014全国两会学习心得体会
2014/03/10 职场文书
安全生产大检查方案
2014/05/07 职场文书
董事长助理工作职责
2014/06/08 职场文书
python双向链表实例详解
2022/05/25 Python
Qt数据库应用之实现图片转pdf
2022/06/01 Java/Android
Spring Cloud OpenFeign模版化客户端
2022/06/25 Java/Android