基于wpDiscuz评论系统的用户IP归属地功能实现

前言

随着《互联网用户账号信息管理规定》的发布,各大热门网站包括软件、游戏方面也开始显示IP属地了。笔者这个站点当然不能落下啦,遵守国家法律法规的要求。于是就想着记录一下实现方法为站点后期维护提供记录。

实现方法

该功能参考的评论区显示用户IP归属地 - 广然笔记 (rsecc.cn)

参考广然站长的代码,笔者做了如下更改,用在了本站。

获取归属地

前面的步骤不变,构建用于获取归属地的get_user_address.php文件 ,将get_user_address.php放入主题下的根目录并将其引入主题的function.php中,这块按照广然的设置即可。

get_user_address.php文件 如下:

<?php
function province($user_ip)
{
        if(!filter_var($user_ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6))
        {
         //高德API
        $url = "https://restapi.amap.com/v3/ip?key=【此处填写API Key】&ip=".$user_ip;
        $UserAgent = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; .NET CLR 3.5.21022; .NET CLR 1.0.3705; .NET CLR 1.1.4322)';
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_HEADER, 0);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($curl, CURLOPT_ENCODING, '');
        curl_setopt($curl, CURLOPT_USERAGENT, $UserAgent);
        curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
        $data = curl_exec($curl);
        $data = json_decode($data, true);
        $province = isset($data['province']) ? $data['province'] : "未知属地"; 
        return $province;
        }
        else
        {
        $province = "因为穷,IPv6访客暂不支持显示归属地";
        return $province;
        }
}
?>

wpDiscuz修改

本站的评论系统用的wpDiscuz,需要在wpDiscuz文件夹下找到 评论相关的函数。我的想法是在日期的后面加上IP归属地,于是找到-themes/default/class.WpdiscuzWalker.php文件下start_el函数主要用来生成评论的布局的,在该函数下找到wpd-comment-date。

将下面这段代码

$replace[] = ($this->options->general["simpleCommentDate"]) ? esc_html($commentDate) : esc_html($this->helper->dateDiff($comment->comment_date_gmt));

替换为

 /*$replace[] = ($this->options->general["simpleCommentDate"]) ? esc_html($commentDate) : esc_html($this->helper->dateDiff($comment->comment_date_gmt));*/
 $replace[] = ($this->options->general["simpleCommentDate"]) ? esc_html($commentDate) : esc_html($this->helper->dateDiff($comment->comment_date_gmt))."·<a style=''>来自".province(get_comment_author_ip())."</a>";//显示的日期

 

按照如上操作我们的归属地功能就完成了,最终效果:

 

作者:Miracle
来源:麦瑞克博客
链接:https://www.unitymake.com/archives/blog_construction/1600
本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0许可协议,转载请注明!
THE END
分享
打赏
海报
基于wpDiscuz评论系统的用户IP归属地功能实现
前言 随着《互联网用户账号信息管理规定》的发布,各大热门网站包括软件、游戏方面也开始显示IP属地了。笔者这个站点当然不能落下啦,遵守国家法律法规的要求……
<<上一篇
下一篇>>
文章目录
关闭
目 录