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各种编码集详解和以及在什么情况下进行使用
Sep 11 PHP
Notice: Trying to get property of non-object problem(PHP)解决办法
Mar 11 PHP
thinkPHP的Html模板标签使用方法
Nov 13 PHP
Drupal7 form表单二次开发要点与实例
Mar 02 PHP
PHP获取栏目的所有子级和孙级栏目的ID号示例
Apr 01 PHP
两个php日期控制类实例
Dec 09 PHP
php面向对象中static静态属性和静态方法的调用
Feb 08 PHP
php三种实现多线程类似的方法
Oct 30 PHP
Zend Framework分页类用法详解
Mar 22 PHP
PHP上传图片、删除图片简单实例
Nov 12 PHP
PHP _construct()函数讲解
Feb 03 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
Feb 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边学边教》(02.Apache+PHP环境配置――上篇)
2006/12/13 PHP
php中经典方法实现判断多维数组是否为空
2011/10/23 PHP
Symfony实现行为和模板中取得request参数的方法
2016/03/17 PHP
Laravel5.5新特性之友好报错以及展示详解
2017/08/13 PHP
PHP实现数组转JSon和JSon转数组的方法示例
2018/06/14 PHP
表单提交验证类
2006/07/14 Javascript
jQuery 连续列表实现代码
2009/12/21 Javascript
属于你的jQuery提示框(Tip)插件
2016/01/20 Javascript
JavaScript统计字符串中每个字符出现次数完整实例
2016/01/28 Javascript
js根据手机客户端浏览器类型,判断跳转官网/手机网站多个实例代码
2016/04/30 Javascript
jQuery Ajax和getJSON获取后台普通json数据和层级json数据用法分析
2016/06/08 Javascript
js实现无缝循环滚动
2020/06/23 Javascript
AngularJS实现星星等级评分功能
2016/09/24 Javascript
vue-router单页面路由
2017/06/17 Javascript
JavaScript数据结构之双向链表定义与使用方法示例
2017/10/27 Javascript
浅谈Vue 性能优化之深挖数组
2018/12/11 Javascript
vue封装自定义指令之动态显示title操作(溢出显示,不溢出不显示)
2020/11/12 Javascript
python实现基本进制转换的方法
2015/07/11 Python
用tensorflow实现弹性网络回归算法
2018/01/09 Python
Python数据分析之双色球统计单个红和蓝球哪个比例高的方法
2018/02/03 Python
Flask框架信号用法实例分析
2018/07/24 Python
对IPython交互模式下的退出方法详解
2019/02/16 Python
Python 中Django验证码功能的实现代码
2019/06/20 Python
使用Python画股票的K线图的方法步骤
2019/06/28 Python
详解Canvas 跨域脱坑实践
2018/11/07 HTML / CSS
运动服饰每月订阅盒:Ellie
2018/04/29 全球购物
String这个类型的class为何定义成final?
2012/11/13 面试题
main 函数执行以前,还会执行什么代码
2013/04/17 面试题
总监职责范文
2013/11/09 职场文书
网络信息管理员岗位职责
2014/01/05 职场文书
遵纪守法演讲稿
2014/05/23 职场文书
党员群众路线整改措施及今后努力方向
2014/10/28 职场文书
2014年底工作总结
2014/12/15 职场文书
初中地理教学反思
2016/02/19 职场文书
党员公开承诺书2016
2016/03/24 职场文书
Python实现信息轰炸工具(再也不怕说不过别人了)
2021/06/11 Python