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脚本的10个技巧(7)
Oct 09 PHP
PHP与MySQL开发中页面乱码的产生与解决
Mar 27 PHP
php获取mysql数据库中的所有表名的代码
Apr 23 PHP
ThinkPHP的cookie和session冲突造成Cookie不能使用的解决方法
Jul 01 PHP
php递归函数三种实现方法及如何实现数字累加
Aug 07 PHP
php中mkdir()函数的权限问题分析
Sep 24 PHP
PHP对XML内容进行修改和删除实例代码
Oct 26 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
Jun 16 PHP
PHP钩子实现方法解析
May 21 PHP
解决thinkPHP 5 nginx 部署时,只跳转首页的问题
Oct 16 PHP
使用laravel指定日志文件记录任意日志
Oct 17 PHP
php使用goto实现自动重启swoole、reactphp、workerman服务的代码
Apr 13 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生成xml简单实例代码
2009/12/16 PHP
PHP如何通过带尾指针的链表实现'队列'
2020/10/22 PHP
用表格输出1-1000之间的数字实现代码(附特效)
2013/04/21 Javascript
javascript中encodeURI和decodeURI方法使用介绍
2013/05/06 Javascript
JavaScript判断变量是否为undefined的两种写法区别
2013/12/04 Javascript
javascript在子页面中函数无法调试问题解决方法
2014/01/17 Javascript
JavaScript String 对象常用方法总结
2016/04/28 Javascript
浅析Javascript中bind()方法的使用与实现
2016/04/29 Javascript
js简单倒计时实现代码
2016/04/30 Javascript
【经验总结】编写JavaScript代码时应遵循的14条规律
2016/06/20 Javascript
json格式的javascript对象用法分析
2016/07/04 Javascript
nodejs个人博客开发第一步 准备工作
2017/04/12 NodeJs
angularjs之$timeout指令详解
2017/06/13 Javascript
vue通过路由实现页面刷新的方法
2018/01/25 Javascript
原生JS forEach()和map()遍历的区别、兼容写法及jQuery $.each、$.map遍历操作
2019/02/27 jQuery
微信小程序实现同一页面取值的方法分析
2019/04/30 Javascript
vue设置动态请求地址的例子
2019/11/01 Javascript
如何在vue 中引入使用jquery
2020/11/10 jQuery
[07:54]DOTA2 MV《我的动力鞋》 ImbaTV 出品
2014/11/21 DOTA
python实现从ftp服务器下载文件的方法
2015/04/30 Python
详解Python的Django框架中的中间件
2015/07/24 Python
python实现微信远程控制电脑
2018/02/22 Python
Numpy截取指定范围内的数据方法
2018/11/14 Python
python中退出多层循环的方法
2018/11/27 Python
CSS3实现王者匹配时的粒子动画效果
2019/04/12 HTML / CSS
Reebonz中国官网:新加坡奢侈品购物网站
2017/03/17 全球购物
Superdry极度干燥美国官网:英国制造的服装品牌
2018/11/13 全球购物
有模特经验的简历自我评价
2013/09/19 职场文书
给领导的致歉信范文
2014/01/13 职场文书
网上快餐厅创业计划书
2014/02/01 职场文书
房地产营销策划方案
2014/02/08 职场文书
公司寄语大全
2014/04/10 职场文书
媒体宣传策划方案
2014/05/25 职场文书
小学生反邪教心得体会
2016/01/15 职场文书
2019年入党思想汇报
2019/03/25 职场文书
利用Selenium添加cookie实现自动登录的示例代码(fofa)
2021/05/08 Python