前不久,同时集成了Show UserAgent和IP归属地的文字信息。连运营商都给肉出来了的评论显示美化。
于是,小灰灰试着折腾了下,目前已经用了有一段时间了。测试了在线获取和本地数据2种方案,都还不错!不过在线获取方式,若是没有做静态化可能会稍微拖慢加载速度。
下面开始分享。
一、在线方案
①、在线API
在线查询IP信息的API有很多,比如淘宝、百度和新浪都有IP信息查询的API接口,地址如下:
百度:http://apistore.baidu.com/microservice/iplookup?ip=114.114.114.114
淘宝:http://ip.taobao.com/service/getIpInfo.php?ip=114.114.114.114
新浪:http://int.dpool.sina.com.cn/iplookup/iplookup.php?ip=114.114.114.114
请求方式都是GET,返回都是json格式。
如何将这个东东应用到WordPress评论列表呢?很简单,挑一个用得比较多的淘宝作为范例吧!喜欢其他的自行参考修改即可。
②、PHP代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | /** * WordPress 显示评论者IP归属地PHP函数 * http://zhangge.net/5060.html **/ function get_locate($ip) { if(empty($ip)) $ip = get_comment_author_IP(); $ch = curl_init(); $timeout = 5; curl_setopt ($ch, CURLOPT_URL, 'http://ip.taobao.com/service/getIpInfo.php?ip='.$ip); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout); $file_contents = curl_exec($ch); curl_close($ch); $result = json_decode($file_contents,true); if ($result['data']['country'] != '中国') { return $result['data']['country']; } else { return $result['data']['country'].' · '.$result['data']['region'].' · '.$result['data']['city'].' · '.$result['data']['isp']; } } |
将上述代码添加到WordPress主题函数模板文件 functions.php 中并保存。
然后,在 WordPress 评论模板函数中合适的位置插入如下代码即可:
1 | <?php get_locate(get_comment_author_ip());?> |
Ps:大部分国内主题都会自定义一个评论模板函数,要找到这个函数很简单,先打开主题下的评论模板文件comments.php文件,找到如下类似代码:
1 | <?php wp_list_comments( 'type=comment&callback=mytheme_comment' ); ?> |
如上代码中的callback值则是主题自定义的评论模板回调函数,即 mytheme_comment。
接着,只要在主题下全局搜索 mytheme_comment 这个关键词就能找到对应的函数啦!至于添加到哪就自己把握了,每个主题都不一样,我就不赘述了。
这个在线查询评论者归属地的效果忘记截图了,我定义的是是 [中国 · 广东 · 深圳 · 电信] 这种形式,喜欢的可以部署看看。
二、本地方案
本地方案则是借助qq纯真ip数据库来查询IP的归属地信息,无需在线获取,从而效率更高。当然,本地数据是不会自己更新的,实时准确性肯定比在线的稍微弱一点,不过我们自己手动更新本地IP数据库文件就好了。
①、数据文件
先下载小灰灰博客整理好的压缩包,解压后得到 ip2c 文件夹,然后上传到WordPress主题目录下。
②、部署代码
I. 功能集成
为了避免相对路径的麻烦问题,此次分享我已经将可用代码直接放到压缩包当中。
上传到主题目录之后,请编辑 WordPress 主题目录下的 functions.php 文件,添加如下代码:
1 | include("ip2c/ip2c.php"); //IP归属地和运营商查询功能 |
II. 展示代码
接着参考上文在线方案,找到主题自定义的评论样式回调函数,然后在合适的位置加入如下代码:
1 | <?php echo convertip(get_comment_author_ip()); ?> |
就能在前台评论列表对应位置展示评论者的IP归属地和运营商信息了: