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 相关文章推荐
mysqli_set_charset和SET NAMES使用抉择及优劣分析
Jan 13 PHP
探讨如何使用SimpleXML函数来加载和解析XML文档
Jun 07 PHP
解析PHP中一些可能会被忽略的问题
Jun 21 PHP
PHP中的函数-- foreach()的用法详解
Jun 24 PHP
php计算当前程序执行时间示例
Apr 24 PHP
php中$美元符号与Zen Coding冲突问题解决方法分享
May 28 PHP
PHP数组遍历知识汇总(包含遍历方法、数组指针操作函数、数组遍历测速)
Jul 05 PHP
PHP生成不重复标识符的方法
Nov 21 PHP
新浪SAE搭建PHP项目教程
Jan 28 PHP
PHP中的类型约束介绍
May 11 PHP
PHP中in_array的隐式转换的解决方法
Mar 06 PHP
PHP基于openssl实现的非对称加密操作示例
Jan 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
CPU步进是什么意思?i3-9100F B0步进和U0步进区别知识科普
2020/03/17 数码科技
一个更简单的无限级分类菜单代码
2007/01/16 PHP
说明的比较细的php 正则学习实例
2008/07/30 PHP
php中的filesystem文件系统函数介绍及使用示例
2014/02/13 PHP
PHP实现随机生成水印图片功能
2017/03/22 PHP
PHP设计模式之模板模式定义与用法详解
2018/12/20 PHP
ExtJS 学习专题(一) 如何应用ExtJS(附实例)
2010/03/11 Javascript
jquery post方式传递多个参数值后台以数组的方式进行接收
2013/01/11 Javascript
jquery 延迟执行实例介绍
2013/08/20 Javascript
JS页面延迟执行一些方法(整理)
2013/11/11 Javascript
js 本地预览的简单实现方法
2014/02/18 Javascript
JavaScript实现图像模糊化的方法实例
2017/01/15 Javascript
node.js多个异步过程中判断执行是否完成的解决方案
2017/12/10 Javascript
Angular整合zTree的示例代码
2018/01/24 Javascript
Vue中使用vue-i18插件实现多语言切换功能
2018/04/25 Javascript
ES6之模版字符串的具体使用
2018/05/17 Javascript
Vue瀑布流插件的使用示例
2018/09/19 Javascript
微信小程序学习笔记之跳转页面、传递参数获得数据操作图文详解
2019/03/28 Javascript
JS实现随机点名器
2020/04/12 Javascript
python回调函数的使用方法
2014/01/23 Python
Python操作MongoDB数据库PyMongo库使用方法
2015/04/27 Python
在python中使用requests 模拟浏览器发送请求数据的方法
2018/12/26 Python
Django Rest framework频率原理与限制
2019/07/26 Python
Python 单例设计模式用法实例分析
2019/09/23 Python
python shutil文件操作工具使用实例分析
2019/12/25 Python
HTML5播放实现rtmp流直播
2020/06/16 HTML / CSS
爱尔兰家电数码商城:Currys PC World爱尔兰
2016/07/23 全球购物
纽约州一群才华横溢的金匠制作而成:Hearth Jewelry
2019/03/22 全球购物
澳大利亚实惠时尚女装商店:Katies
2019/06/16 全球购物
VLAN和VPN有什么区别?分别实现在OSI的第几层?
2014/12/23 面试题
会议通知格式范文
2015/04/15 职场文书
乡镇保密工作承诺书
2015/05/04 职场文书
民政局未婚证明
2015/06/15 职场文书
Python并发编程实例教程之线程的玩法
2021/06/20 Python
Golang Web 框架Iris安装部署
2022/08/14 Python
javascript中Set、Map、WeakSet、WeakMap区别
2022/12/24 Javascript