腾讯云服务器优惠活动华纳云香港服务器

WordPress评论管理界面添加用户IP端口和时间

WordPress主题推荐

前段时间网警叔叔对例行检查博客网络安全情况后,给本博客下达了整改通知书,大概意思就是说,用户的访问记录日志记录得不够全面,最关键是没有记录访客 IP 的端口。为了完成警察叔叔的要求,做到遵守网安的相关法律法规,最终还是决定在WordPress 评论管理页面增加访客的端口号这么个记录。

从整改通知书中看,需要在评论管理界面,增加留评用户 IP 端口一栏,既然要端口号,那就开始干吧。那么要记录和显示 IP 端口,需要怎样一个流程实现呢?

实现思路

  • 问题:记录和显示留评用户 IP 端口
  • 流程:获取 用户 IP 端口号 – 记录 用户 IP 端口号 – 显示 用户 IP 端口号

获取用户 IP 端口号

通过度娘,得知,PHP 获取用户 IP 端口号,可以使用如下参数:

$_SERVER['REMOTE_PORT']

记录用户端口号

端口号都拿到了,那记录该怎么办呢?要记录,肯定要动数据库,就是要把这个端口号记录到数据库里。记录到数据库,要么自己新建一张数据表,用来记录用户的评论编号 ID 和 用户的端口。记录评论 ID 是为了方便索引。不过这个太麻烦,我们这种大白菜,自己新建表太不安全了。那另一个方案就是利用现有的数据表,新增内容。现有数据表,相关的有 wp_comment 和 wp_commentmeta 两张表可以用,而 wp_comment 似乎要新增一栏来存储端口,或者在 comment_author_IP 这栏里面追加 IP 端口进去,查找了很多资料,发现,在 comment_author_IP 栏里追加,无法实现。最后,就只剩下捣鼓 wp_commentmeta 这张表了。幸好,大神很多,我们可以得到如下代码来存储我们获得的用户 IP 端口号。

请将这段代码复制粘贴到你的主题 functions.php 文件中,Young Free 比较喜欢放在最末尾 “>” 符号前。(部分主体没有 “>” 符号,自己看着办吧,我也不懂。)

//IP 端口 获取与存储
add_action('wp_insert_comment','wp_insert_ipport',10,2);
function wp_insert_ipport($comment_ID,$commmentdata) {
$ipport = $_SERVER['REMOTE_PORT'];
//ipport 是存储在数据库里的字段名字,取出数据的就会用到
update_comment_meta($comment_ID,'_ipport',$ipport);
}

代码都添加好了,那么,留个评论自己试一下,看看数据库里准确的记录 IP 端口号了没。如果顺利记录到了,你的数据库 wp_commentmeta 表应该如下显示:

WordPress评论管理界面添加用户IP端口和时间-第1张-boke112百科(boke112.com)

好吧,数据已经正确记录了,那就折腾显示吧。没有这么显示?哦多克,我也不晓得怎么办。检查下代码有没有复制正确吧。

后台显示端口号

这个时候,又要求助万能的度娘了,此处省略 3 个小时调戏度娘并学习 PHP 相关知识的时间。通过度娘得知,使用以下代码可以在评论管理界面增加一栏,用以显示端口。同样,请将代码复制到你主题的 functions.php 文件中。

//后台评论添加 IP 端口栏目
add_filter( 'manage_edit-comments_columns', 'my_comments_columns' );
add_action( 'manage_comments_custom_column', 'output_my_comments_columns', 10, 2 );
function my_comments_columns( $columns ){
$columns[ '_ipport' ] = __( 'IP Port' );        //IP Port 代表列的名字
return $columns;
}
function output_my_comments_columns( $column_name, $comment_id ){
switch( $column_name ) {
case "_ipport" :
echo get_comment_meta( $comment_id, '_ipport', true );
break;
}
}

添加完毕,也就差不多完成了。本着科学求是的态度,我们还是要做一下最后的检验,看看后台评论管理界面是不是正确展示了我们亲爱的用户的 IP 端口号。应该如下显示:

WordPress评论管理界面添加用户IP端口和时间-第2张-boke112百科(boke112.com)

至此,就完成了网安整改要求。接下来就是找网安警察叔叔提交整改回复啦。

美化展示

因为 Young Free 的技术就这白菜样,警察叔叔说 IP 端口已经有了,但是和 IP 地址隔的远,不够直观,需要调整。好吧,继续折腾。通过继续调戏度娘和学习 PHP 相关知识,Young Free 整理了如下代码,同时给追加的栏目添加了 CSS 效果,以更好的显示,不错乱。敬请食用以下代码:

//IP 端口 获取与存储
add_action('wp_insert_comment','wp_insert_ipport',10,2);
function wp_insert_ipport($comment_ID,$commmentdata) {
#   $userip = $_SERVER['HTTP_CLIENT_IP']; //这里获取用户 IP 地址,需要按需修改
$ipport = $_SERVER['REMOTE_PORT'];
//ipport 是存储在数据库里的字段名字,取出数据的就会用到
#   update_comment_meta($comment_ID,'_userip',$userip);
update_comment_meta($comment_ID,'_ipport',$ipport);
}
//为 IP Port 栏目添加 CSS
function ipport_css() {
?>
<style type="text/css">
#_ipport { width: 50px; } /* CSS for ipport columns */
#_userip { width: 50px; } /* CSS for ip columns */
#author_ip { width: 50px; } /* CSS for ip columns */
</style>
<?php
}
add_action('admin_head', 'ipport_css');
//后台评论添加 IP 端口栏目
add_filter( 'manage_edit-comments_columns', 'my_comments_columns' );
add_action( 'manage_comments_custom_column', 'output_my_comments_columns', 10, 2 );
function my_comments_columns( $columns ){
#   $columns[ '_userip' ] = __( 'User IP' );        //User IP 代表列的名字
$columns[ 'author_ip' ] = __( 'User IP' );        //User IP 代表列的名字
$columns[ '_ipport' ] = __( 'IP Port' );        //IP Port 代表列的名字
return $columns;
}
function output_my_comments_columns( $column_name, $comment_id ){
switch( $column_name ) {
case "author_ip" :
echo get_comment_author_IP( $comment_id, 'author_ip', true );
break;
#       case "_userip" :
#       echo get_comment_meta( $comment_id, '_userip', true );
#       break;
case "_ipport" :
echo get_comment_meta( $comment_id, '_ipport', true );
break;
}
}

说明一下:这段代码中,把 IP 也显示在 IP 端口前,给出了 2 种可行的办法,请自行选择修改。其中,被注释掉的一段

$userip = $_SERVER['HTTP_CLIENT_IP'];

这句用来获取用户的 IP,这里给出的是,获取用户浏览器客户端的 IP 地址,如果用户使用了代理,或者,你用了 CDN,或者,用户是局域网,哦豁,这里就不起作用了,无法获取用户的真实 IP。但是还可以用如下代码替换

$_SERVER["REMOTE_ADDR"] //取得客户端的 IP 地址;
$_SERVER["HTTP_X_FORWARDED_FOR"] //通过代理服务器取得客户端的真实 IP 地址;
$_SERVER["HTTP_CLIENT_IP"] //获取客户端,及浏览器所在的电脑的 ip 地址

建议直接食用,不要挑食,以免出问题。直接食用,效果应该如下:(不是这样?Oh boy, 我也不知道咋办,去调戏度娘吧,或者,留个评论试试?)

WordPress评论管理界面添加用户IP端口和时间-第3张-boke112百科(boke112.com)

插件下载

如果不想折腾代码,那么可以直接下载插件启用后即可使用。声明下,由于初次制作插件,不晓得怎么把下面三个大佬的链接加进去,所以只能在博客里再次表示感谢大佬们分享的代码。

特别感谢

本文,大量通过度娘学习和了解 PHP 相关内容,特别感谢以下三篇博客:

赞 (2) 打赏
版权声明:本文为转载文章,来源于 Young Free ,版权归原作者所有!发布此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请联系我们,确认后马上更正或删除,谢谢!
wu