子比主题评论区增加显示地区

要求

增加功能需要用到高德地图api,自己百度,自己开通。当然也可以用其他平台的接口

QQ截图20230126101725

 

服务平台要用Web服务

高德地图API接口开发指南文档:

https://lbs.amap.com/api/webservice/guide/api/ipconfig

如何使用归属地查询api

第一步:在主题根目录下创建func.php文件,并在第一行写上<?php(已经创建了此文件的就不用管了)

第二步:在func.php文件中最下行增加下面的代码

第三步:自己去高德申请接口后,修改以下代码中的高德key为你申请的。

QQ截图20230126101908

通过此方法不会影响以后主题在线更新,在线更新不会丢失此功能。

QQ截图20230126102033

* @description: 根据ip地址获取用户地区
 * @param {*} $user_ip
 * @return {*}
 */
function wxs_user_ip($user_ip)
{
    $api_key = ' '; //这里填上你申请的高德key

    if (!$api_key || !$user_ip) {
        return '';
    }

    $api  = 'https://restapi.amap.com/v3/ip?key=' . $api_key . '&output=json&ip=' . $user_ip;
    $json = file_get_contents($api);
    $arr  = (array) json_decode($json, true);

    if (empty($arr['province'])) {
        //没有获取到地区显示的内容
        $dizhi = "未知地区"; //这里可以改成其他的
    } else {
        $dizhi = $arr['province'];
    }
    return $dizhi;
}

/**
 * @description: 在评论区显示地区
 * @param {*} $info
 * @param {*} $comment
 * @param {*} $depth
 * @return {*}
 */
function wxs_footer_info_add_province($info, $comment, $depth)
{
    $user_ip = $comment->comment_author_IP;
    if ($user_ip) {
        $province = wxs_user_ip($user_ip);
        $province = $province ? '<span class="badg c-grey badg-sm flex0 ml3" data-toggle="tooltip" alt="IP:' . $user_ip . '" title="该用户评论时所在地区:' . $province . '">' . $province . '</span>' : '';

        $info = $province . $info;
    }

    return $info;
}
add_filter('comment_footer_info', 'wxs_footer_info_add_province', 10, 3);

代码的原理:使用wp记录评论者评论时的ip地址,将评论记录的ip作为接口参数拼接到接口url。使用php的函数获取api接口返回json数组。将json转换为php认识的内容,再将省份的内容提取出来。在指定位置增加添加经过判断是否为未知区域的归属地。

高德地图的api除了无法查询到1%IP归属地和海外归属地,除此之外还有一个大坑。它查询不到IP的归属地,就返回数组为空。我写这个代码的时候,没有注意到,也没有加判断。当时有一个人的评论显示Array,当时给我弄懵了,后来才发现这个大坑。所以我给代码加了显示未知归属地的判断。

注意事项:

如果你的网站有cdn,那么需要在wordpress配置文件wp-config.php第二行<?php下面增加下面的代码,用于获取用户真实ip地址,否则wp保存的就是cdn的回源的ip。

//获取用户真实ip地址
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
  $list = explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']);
  $_SERVER['REMOTE_ADDR'] = $list[0];
}

 

会举一反三的人,看了帖子以后已经在其它页面增加归属地显示了,你还在等什么?

QQ截图20230126102551

 

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容