为你的WordPress站点博客添加评论区显示用户IP地址

序言:

之前看到有相关法规需要显示用户ip地址,虽然我这是一个小站点,但是还是萌生了增加这个功能的想法。

基本思路

通过WordPress的

get_comment_author_ip()

获取到用户的ip地址,然后利用腾讯地图开放平台查询ip归属地,然后显示在站点前端。

效果演示

IMG_20220820_204948-300x133-1

功能实现

首先在站点目录新建get_user_address.php文件,然后贴入以下代码:

<?php
function province($user_ip)
{
         $url = "https://apis.map.qq.com/ws/location/v1/ip?key=(这里输入你的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);
        $result = array_column($data, 'ad_info');
        $resulta = array_column($result, 'province');
        $province = array_shift($resulta);
        return $province;
}
?>

方法调用

在主题文件目录下的functions.php文件最后一行填入以下代码:

include("get_user_address.php");

评论区显示

在主题的评论文件中填入以下代码,建议填在时间代码后方:

·<a style='color:#07C160'><?php echo province(get_comment_author_ip()); ?></a>

然后你就能看到评论区的ip地址了。

关于CDN加速

如果使用了CDN加速,可能会访问CDN的地址,解决办法可以在wp-config.php添加以下代码:

if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
{
$list = explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']);
$_SERVER['REMOTE_ADDR'] = $list[0];
}

然后就可以看到真实ip地址了。

Comments | 10 条评论

  • 王子涵

    老哥 这个评论 在主题的评论文件中填入以下代码,建议填在时间代码后方: 这个是不是添加在comments.php里面啊 我跟你一样的注册 添加在这个里面了 评论IP归属地还是不显示

    来自黑龙江
    • 战东海

      @王子涵 不一定主题不一样添加的位置不一样

      来自辽宁
      • 王子涵

        @战东海 我也是pix主题 你是加的comments.php里面么

        来自黑龙江
        • 战东海

          @王子涵 pix主题 不用添加主题自带片刻设置里高德开放平台应用KEY填入就可以

          来自辽宁
          • 王子涵

            @战东海 好的 谢谢老哥

            来自黑龙江
          • 王子涵

            @战东海 老哥 我填写完了key 但是评论还不显示呢 还需要按照你这个填上评论区代码么

            来自黑龙江
消息盒子
# 您需要首次评论以获取消息 #
# 您需要首次评论以获取消息 #

只显示最新10条未读和已读信息