1.演示效果
2.实现教程
由老白博客@老白转载自权戈网络,好文值得备份,原文:https://www.teelm.com/2022/05/19/24584.html,感谢站长分享
2.1 在线方案一
(免费次数太少,不建议商用)
张戈博客原在线方案的在线 API:淘宝、百度和新浪的 API 接口都相继关停或失效了,总之已经没法用了。。。
在此介绍一个新的接口:IP查询API接口_免费数据接口 – 极速数据 (jisuapi.com)
该接口提供全国数百万IP的归属地、运营商类型查询,定期更新。免费
- 免费会员:500次/天
- 白银会员:1000次/天
- 钻石会员:15万次/日
只需要将代码添加到 WordPress 主题函数模板文件 functions.php 中并保存
function curlOpen($url, $config = array())
{
$arr = array('post' => false,'referer' => $url,'cookie' => '', 'useragent' => 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; customie8)', 'timeout' => 20, 'return' => true, 'proxy' => '', 'userpwd' => '', 'nobody' => false,'header'=>array(),'gzip'=>true,'ssl'=>false,'isupfile'=>false);
$arr = array_merge($arr, $config);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, $arr['return']);
curl_setopt($ch, CURLOPT_NOBODY, $arr['nobody']);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_USERAGENT, $arr['useragent']);
curl_setopt($ch, CURLOPT_REFERER, $arr['referer']);
curl_setopt($ch, CURLOPT_TIMEOUT, $arr['timeout']);
//curl_setopt($ch, CURLOPT_HEADER, true);//获取header
if($arr['gzip']) curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate');
if($arr['ssl'])
{
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
}
if(!empty($arr['cookie']))
{
curl_setopt($ch, CURLOPT_COOKIEJAR, $arr['cookie']);
curl_setopt($ch, CURLOPT_COOKIEFILE, $arr['cookie']);
}
if(!empty($arr['proxy']))
{
//curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
curl_setopt ($ch, CURLOPT_PROXY, $arr['proxy']);
if(!empty($arr['userpwd']))
{
curl_setopt($ch,CURLOPT_PROXYUSERPWD,$arr['userpwd']);
}
}
//ip比较特殊,用键值表示
if(!empty($arr['header']['ip']))
{
array_push($arr['header'],'X-FORWARDED-FOR:'.$arr['header']['ip'],'CLIENT-IP:'.$arr['header']['ip']);
unset($arr['header']['ip']);
}
$arr['header'] = array_filter($arr['header']);
if(!empty($arr['header']))
{
curl_setopt($ch, CURLOPT_HTTPHEADER, $arr['header']);
}
if ($arr['post'] != false)
{
curl_setopt($ch, CURLOPT_POST, true);
if(is_array($arr['post']) && $arr['isupfile'] === false)
{
$post = http_build_query($arr['post']);
}
else
{
$post = $arr['post'];
}
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
}
$result = curl_exec($ch);
//var_dump(curl_getinfo($ch));
curl_close($ch);
return $result;
}
class ip
{
public function ipQuery($appkey,$ip)
{
$url = "https://api.jisuapi.com/ip/location?appkey=$appkey&ip=$ip";
$result = curlOpen($url, ['ssl'=>true]);
$jsonarr = json_decode($result, true);
//exit(var_dump($jsonarr));
if($jsonarr['status'] != 0)
{
return $jsonarr['msg'];
}
$result = $jsonarr['result'];
return $result['area'].' '.$result['type'];
}
}
function get_locate($ip) {
if(empty($ip)) $ip = get_comment_author_IP();
$appkey = '你的appkey';//你的appkey
$query = new ip;
$result = $query->ipQuery($appkey,$ip);
return $result;
}
然后,在极速数据 (jisuapi.com)注册一个账号,申请一下对应接口(免费申请的)。最后在 WordPress 评论模板函数中合适的位置插入如下代码即可:
B2主题可添加在wp-contentthemesb2ModulesCommonComment.php:268行后面
2.2 在线方案二(支持IPV4、IPV6)
利用 ip-api 免费IP地址查询API接口,在function.php添加代码
2.3 本地方案(QQ纯真数据库)
本地方案则是借助 qq 纯真 ip 数据库来查询 IP 的归属地信息,无需在线获取,从而效率更高。当然,本地数据是不会自己更新的,实时准确性肯定比在线的稍微弱一点,不过我们自己手动更新本地 IP 数据库文件就好了。
文件下载:https://pan.baidu.com/s/1v2Dzg
上传到主题目录之后,请编辑 WordPress 主题目录下的 functions.php 文件,添加如下代码:
接着参考上文在线方案,找到主题自定义的评论样式回调函数,然后在合适的位置加入如下代码:
IP 数据库文件更新,前往out0fmemory/qqwry.dat: 自动更新的纯真ip库,每天自动更新 (github.com)下载qqwry_lastest.dat文件覆盖目录内的.dat文件即可:https://github.com/out0fmemory/qqwry.dat
就能在前台评论列表对应位置展示评论者的 IP 归属地和运营商信息了
赞!这个教程太实用了666
这篇真不错666
好文分享,学习到不少知识呀
太实用了,刚好需要666
很实用的教程,让我学习到了新技巧 这么详细的步骤666
这个教程真不错 赞赞赞
实用教程,太棒了666
学习到了新技巧666
超实用的教程666
这个教程真不错666
太实用了吧666
很实用的教程,感谢分享 继续加油
很实用的教程666
太实用了!谢谢分享
好文章,学习到了知识呢
这个教程太实用了!赞!
很好用的教程 赞一个 试试这个方法 666
学习到了新知识666
这个教程太给力了 赞赞赞
这教程真棒,太实用了!666
太实用的教程了!点赞!
实用干货,学习了666
太实用了,感谢分享!
太实用了,感谢分享
好详细的教程,试试这个方法吧!
好实用的教程,值得学习666
好文分享,受益良多
好详细的教程666
好文章,学习到了知识 很实用
不错的教程,很实用666
好实用的教程啊666
很棒的教程!试试看吧
太实用了,赞赞赞
好详细的教程!太棒了!
好有用的教程,感谢分享 试试这个方法
太棒了,实用的教程
这教程真不错 学习了很多知识
好文分享,学习了666
很不错的教程,帮助不少人 赞赞赞
学习到了好方法666