wordpress评论管理显示访客IP归属地

2018年8月15日17:42:13 4 1,235 次
摘要

上一篇文章中分享了使用CDN加速后获取真实评论者IP的方法,这里再分享一个技巧:获取评论者的IP归属地及运营商信息。本文还会用到百度opendata的ip查询api,具体介绍查看这里:分享三个可用的IP查询API。

上一篇文章中分享了使用CDN加速后获取真实评论者IP的方法,这里再分享一个技巧:获取评论者的IP归属地及运营商信息。本文还会用到百度opendata的ip查询api,具体介绍查看这里:分享三个可用的IP查询API

wordpress评论管理显示访客IP归属地

//后台显示评论者IP归属地

add_action('admin_comment_types_dropdown','comment_ip_lookup');
function comment_ip_lookup($a){
//if()
?>
<script>
jQuery(document).ready(function() {
ipList = new Array();
locList = {};
authcol = jQuery("[data-colname='作者']");
authcol.each(function() {
ipWrapper = jQuery(this).children("a").last();
ip = ipWrapper.html();
ipList.push(ip);
ipWrapper.after('</br><span addr="' + ip + '" style="display:none;"></span>');
});
ipList = uniqueArr(ipList);
i = 0;
intv = setInterval(function() {
if (i == ipList.length - 1) window.clearInterval(intv);
jQuery.getScript("http://opendata.baidu.com/api.php?query=" + ipList[i] + "&co=&resource_id=6006&ie=utf8&oe=gbk&cb=displayLoc&format=json");
i++;
},
150);
});
function uniqueArr(array) {
var r = [];
for (var i = 0,
l = array.length; i < l; i++) {
for (var j = i + 1; j < l; j++) if (array[i] === array[j]) j = ++i;
r.push(array[i]);
}
return r;
}
function displayLoc(result) {
var location = result['data'][0]['location'];
var ip = result['data'][0]['OriginQuery'];
jQuery("[addr='" + ip + "']").html(location).fadeIn("slow");
}
</script>
<?php
}

admin_comment_types_dropdown钩子在打开评论管理页面(edit-comments.php)时触发,通过jquery遍历本页面所有评论者ip地址,在ip地址后加一个span用来显示归属地信息。将所有ip地址放入ipList数组并去重后通过api逐一查询归属地。通过jsonp的回调函数显示归属地信息。

这里查询ipList归属地的时候没有直接使用ipList.each而是使用了setInterval,为了避免同时进行过多查询被api限制(taobao的api显示每秒10个,百度的未知)。

avatar

评论已关闭!

目前评论:4   其中:访客  4   博主  0

    • avatar 小白白 0

      这段代码要插入到哪个文件才生效?

        • avatar mr.z 3

          @小白白 主题的function文件,或者已启用的插件的function文件也行。

        • avatar 烟灰 0

          你好,复制到functions.phP后没有生效,是api有变化了么?

            • avatar mr.z 3

              @烟灰 没有变化,看复制粘贴时是不是有代码格式错了。