要求
增加功能需要用到高德地图api,自己百度,自己开通。当然也可以用其他平台的接口
服务平台要用Web服务
高德地图API接口开发指南文档:
https://lbs.amap.com/api/webservice/guide/api/ipconfig
如何使用归属地查询api
第一步:在主题根目录下创建func.php
文件,并在第一行写上<?php
(已经创建了此文件的就不用管了)
第二步:在func.php
文件中最下行增加下面的代码
第三步:自己去高德申请接口后,修改以下代码中的高德key为你申请的。
通过此方法不会影响以后主题在线更新,在线更新不会丢失此功能。
* @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];
}
会举一反三的人,看了帖子以后已经在其它页面增加归属地显示了,你还在等什么?
© 版权声明
THE END
暂无评论内容