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的curl实现get和post的代码
Aug 23 PHP
PHP安全配置详细说明
Sep 26 PHP
PHP中如何调用webservice的实例参考
Apr 25 PHP
解析php中static,const与define的使用区别
Jun 18 PHP
php中的boolean(布尔)类型详解
Oct 28 PHP
php+highchats生成动态统计图
May 21 PHP
ThinkPHP3.1新特性之对分组支持的改进与完善概述
Jun 19 PHP
php中的ini配置原理详解
Oct 14 PHP
Yii2组件之多图上传插件FileInput的详细使用教程
Jun 20 PHP
smarty循环嵌套用法示例分析
Jul 19 PHP
简单的pgsql pdo php操作类实现代码
Aug 25 PHP
php获取指定数量随机字符串的方法
Feb 06 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
Swoole实现异步投递task任务案例详解
2019/04/02 PHP
JS 对象介绍
2010/01/20 Javascript
一些实用的jQuery代码片段收集
2011/07/12 Javascript
js定时调用方法成功后并停止调用示例
2014/04/08 Javascript
百度移动版的url编码解码示例
2014/04/29 Javascript
jquery禁止回车触发表单提交
2014/12/12 Javascript
轻松学习jQuery插件EasyUI EasyUI创建菜单与按钮
2015/11/30 Javascript
js中使用使用原型(prototype)定义方法的好处详解
2016/07/04 Javascript
JQuery动态添加Select的Option元素实现方法
2016/08/29 Javascript
为Jquery EasyUI 组件加上清除功能的方法(详解)
2017/04/13 jQuery
详解Angular 开发环境搭建
2017/06/22 Javascript
jQuery模拟12306城市选择框功能简单实现方法示例
2018/08/13 jQuery
Vue指令v-for遍历输出JavaScript数组及json对象的常见方式小结
2019/02/11 Javascript
产制造追溯系统之通过微信小程序实现移动端报表平台
2019/06/03 Javascript
[43:35]TI4 循环赛第二日Liquid vs Fnatic
2014/07/11 DOTA
python 判断是否为正小数和正整数的实例
2017/07/23 Python
通过Python模块filecmp 对文件比较的实现方法
2018/06/29 Python
Matplotlib中文乱码的3种解决方案
2018/11/15 Python
pycharm运行程序时在Python console窗口中运行的方法
2018/12/03 Python
在python中使用requests 模拟浏览器发送请求数据的方法
2018/12/26 Python
浅谈PYTHON 关于文件的操作
2019/03/19 Python
使用Python给头像加上圣诞帽或圣诞老人小图标附源码
2019/12/25 Python
Python基于pyecharts实现关联图绘制
2020/03/27 Python
解决numpy矩阵相减出现的负值自动转正值的问题
2020/06/03 Python
使用Python-OpenCV消除图像中孤立的小区域操作
2020/07/05 Python
python 模拟登陆github的示例
2020/12/04 Python
html5指南-2.如何操作document metadata
2013/01/07 HTML / CSS
Sperry官网:帆船鞋创始品牌
2016/09/07 全球购物
基本款天堂:Everlane
2017/05/13 全球购物
彪马加拿大官网:PUMA加拿大
2018/10/04 全球购物
运动会四百米广播稿
2014/01/19 职场文书
文员的职业生涯规划发展方向
2014/02/08 职场文书
给朋友的道歉短信
2015/05/12 职场文书
2016年大学生就业指导课心得体会
2015/10/09 职场文书
《失物招领》教学反思
2016/02/20 职场文书
SQL Server内存机制浅探
2022/04/06 SQL Server