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下实现伪 url 的超简单方法[转]
Sep 24 PHP
php采用curl访问域名返回405 method not allowed提示的解决方法
Jun 26 PHP
PHP中array_map与array_column之间的关系分析
Aug 19 PHP
php操作mongoDB实例分析
Dec 29 PHP
php语言中使用json的技巧及json的实现代码详解
Oct 27 PHP
PHP获取用户访问IP地址的5种方法
May 16 PHP
php实现微信模板消息推送
Mar 30 PHP
windows环境下使用Composer安装ThinkPHP5
May 18 PHP
php微信开发之图片回复功能
Jun 14 PHP
PHP中使用mpdf 导出PDF文件的实现方法
Oct 22 PHP
Laravel框架定时任务2种实现方式示例
Dec 08 PHP
PHP如何使用cURL实现Get和Post请求
Jul 11 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下mysql数据库操作类(改自discuz)
2010/07/03 PHP
PHP中判断变量为空的几种方法小结
2013/11/12 PHP
Smarty模板变量调节器用法分析
2016/05/23 PHP
Laravel+jQuery实现AJAX分页效果
2016/09/14 PHP
学习YUI.Ext 第二天
2007/03/10 Javascript
如何解决Jquery库及其他库之间的$命名冲突
2013/09/15 Javascript
JavaScript中的数组特性介绍
2014/12/30 Javascript
基于jquery实现的树形菜单效果代码
2015/09/06 Javascript
Bootstrap栅格系统使用方法及页面调整变形的解决方法
2017/03/10 Javascript
Angular实现的自定义模糊查询、排序及三角箭头标注功能示例
2017/12/28 Javascript
小程序日历控件使用方法详解
2018/12/29 Javascript
JS简单数组排序操作示例【sort方法】
2019/05/17 Javascript
JavaScript find()方法及返回数据实例
2020/04/30 Javascript
[51:36]EG vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
在Linux下使用Python的matplotlib绘制数据图的教程
2015/06/11 Python
使用Python编写基于DHT协议的BT资源爬虫
2016/03/19 Python
python编码总结(编码类型、格式、转码)
2016/07/01 Python
浅析python中SQLAlchemy排序的一个坑
2017/02/24 Python
Python如何抓取天猫商品详细信息及交易记录
2018/02/23 Python
Python利用正则表达式实现计算器算法思路解析
2018/04/25 Python
Python饼状图的绘制实例
2019/01/15 Python
详解Python中的测试工具
2019/06/09 Python
python 项目目录结构设置
2020/02/14 Python
pyqt5数据库使用详细教程(打包解决方案)
2020/03/25 Python
PyCharm MySQL可视化Database配置过程图解
2020/06/09 Python
基于 HTML5 WebGL 实现的垃圾分类系统
2019/10/08 HTML / CSS
详解canvas绘图时遇到的跨域问题
2018/03/22 HTML / CSS
地球鞋加拿大官网:Earth Shoes Canada
2020/11/17 全球购物
会计实习期自我鉴定
2013/10/06 职场文书
毕业生个人求职的自我评价
2013/10/28 职场文书
入学申请自荐信范文
2014/02/26 职场文书
原材料检验岗位职责
2014/03/15 职场文书
小学生推普周国旗下讲话稿
2014/09/21 职场文书
个人总结与自我评价2015
2015/03/11 职场文书
2016年大学生暑期社会实践活动总结
2016/04/06 职场文书
使用golang编写一个并发工作队列
2021/05/08 Golang