之前呢,利用纯真IP库实现评论者IP归属地。最近突然想折腾一下,或许是在扬州行的想法吧,像朋友圈那样,可以显示发布信息的定位,以后或许能将这些定位串起来,形成一个轨迹,也许这也是人生的轨迹。本想直接找段代码直接来用的,没找到,或许大家没有这样的需求。后来还是找到了一款插件,叫apoyl-ip,有兴趣可以去看看。看了下代码,他是将IP地址记录到数据库里,然后读取数据库信息来显示IP归属地的。我感觉有点复杂了(看了下数据库才发现,评论的IP信息是有数据库字段的,文章作者却没有,希望官方可以考虑加一个)。
于是我想到了另外一种方法——自定义字段。没错,就是在发布文章时将作者的IP地址记录到自定义字段里,然后get字段,转换为归属地。好,思路有了,说干就干。
演示见本文标题下所显示的城市。
获取作者发布文章时的IP
//在发布文章时添加作者IP字段,开始
add_action('publish_post', 'get_the_author_ip');
function get_the_author_ip($post_id) {
// 添加自定义字段
$meta_key = 'hjylIP'; // 自定义字段名称
$meta_value = $_SERVER['REMOTE_ADDR']; // 自定义字段值
// 添加自定义字段到文章
add_post_meta($post_id, $meta_key, $meta_value, true);
}
//在发布文章时添加作者IP字段,结束
这个简单吧,WP官网上抄来的,其中关键的是$_SERVER['REMOTE_ADDR'],正常都是这个,如果是用代理或者反向代理,可能需要根据实际情况修改,譬如$_SERVER['HTTP_CLIENT_IP']或者$_SERVER['HTTP_X_FORWARDED_FOR']。
将IP信息转换为归属地信息
这个就用现成的,利用之前的纯真IP库同样可以实现。纯真IP库有个好处就是每周都会更新数据库,而且社区版是免费的,只是准确率没有收费版的精确。这也是我为什么在自定义字段里记录IP,而不直接记录归属地信息。具体可以了解之前的文章(点此跳转),这里修改部分代码。
//文章作者发文归属地函数
function getAuthorIp($ip){
if(empty($ip)) $ip = get_post_meta($post->ID,"hjylIP", true);
$qqwry_filepath = get_template_directory() .'/qqwry.dat';
$getLocation = json_encode(IpLocation::getLocation($ip, $qqwry_filepath), JSON_UNESCAPED_UNICODE) . "\n";
$IPinfo = json_decode($getLocation, true);
$country = $IPinfo['country'];
$province = $IPinfo['province'];
//优先显示城市,其次省,最后国家
$city = $IPinfo['city'];
if($ip == '127.0.0.1'){
$data = '小黑屋';
}elseif($city != ""){
$data = $city;
}elseif($province !== "" && $city == ""){
$data = $province;
}else{
$data = $country;
}
return $data;
}
这里与评论不同的是精确到了城市,所以希望纯真IP越做越精确啊,这样我的人生轨迹也完整和精确。
调用IP归属地代码
在single.php你想放的位置调用归属地代码即可。
<?php
if(function_exists('getAuthorIp') && !empty(get_post_meta($post->ID,"hjylIP", true))) {
echo 'φ';
echo getAuthorIp(get_post_meta($post->ID,"hjylIP", true));
}//支持文章作者IP归属地
?>
别看这么简单的代码,搞得我一身汗,可能大家需求没那么高,毕竟IP这个东西也算是隐私。当然希望对有需求的人有所帮助。可能有人会问,为什么以前的文章没有归属地信息呢?因为之前没有IP信息记录啊!
本文链接: WordPress发布文章显示IP归属地
这么晚还没睡呢,这个对于我没啥用,长年都是一个Ip,ip地址叫在闺女旁边侯着。😄😄😄😄
8个月前 · 北京 · Google Chrome 107 Android 14
@Jeffer.Z 是啊,经常这样熬夜!大都没有这样的需求,但是你这个也太幸福了吧!
8个月前 · 合肥 · Wordpress App 24 iPhone iOS 17.4.1
定位这个免费的接口好像都有问题了,很多网站都有,一会我在昆明,一会我在红河,反正就是在云南省境内游荡,目前仅有大平台显示我是在丽江哈,个人博客90%以上错的
8个月前 · 红河哈尼族彝族自治州 · Firefox 124 Windows 10
@sagrre 是的,我感觉免费的定位精确度只能到省,收费的精确度能达到城市以及下面的地区。
8个月前 · 合肥 · Wordpress App 24 iPhone iOS 17.4.1
这个,哈哈哈。
我的 ip 地址几百年都不怎么变得,偶尔变变化也不大。
不如直接加个标记叫做写于 山东青岛,更简单~~
8个月前 · 济南 · Google Chrome 118 Mac OS X 10.15
@obaby 这…哈哈哈,没毛病!
8个月前 · 合肥 · Firefox 124 Windows 10
@obaby 前人就是如此操作的,哈哈。某年某月某日写于某地。
8个月前 · 阿里云 · Google Chrome 109 Windows 10
很类似,我用的是 IP2Location 数据库,也是后来才加的
8个月前 · 北京 · Google Chrome 123 Windows 10
@Dabenshi 是啊,一开始没找到好用的插件,就自己折腾了,后来发现wp还有几个这样的插件的。
8个月前 · 合肥 · Firefox 124 Windows 10
河南这边移动4G的IP有时候会乱显示,南阳郑州濮阳,随机。
8个月前 · 漯河 · Microsoft Edge 122 Windows 10
@网友小宋 可能是免费的IP库不准确吧
8个月前 · 合肥 · Firefox 124 Windows 10
免费的纯真IP库虽然准确度差了一些,但是简单用一用还是可以的。
8个月前 · 上海 · Firefox 124 Windows 10
@威言威语 嗯嗯,是的,好歹可以被纠正,时常更新。
8个月前 · 合肥 · Wordpress App 24 iPhone iOS 17.4.1
以前的QQ显IP外挂好厉害的,对方在哪个网吧都能知道。
8个月前 · 邵阳 · Microsoft Edge 122 Windows 10
@墨铺网 是吧,当时用的就是纯真IP库外挂,准不准不知道,但是感觉就很牛逼。
8个月前 · 合肥 · Firefox 124 Windows 10
我试一下效果呢~~~看准不,
话说,请教下,我要如何才能给访客留住 评论信息呢。。加了一段JS好像没起作用
8个月前 · 重庆 · Google Chrome 123 Windows 10
@KK 给访客留住 评论信息?
是什么意思,不明白。评论是写进数据库的啊。
8个月前 · 合肥 · Firefox 124 Windows 10
@皇家元林 我指的是COOKie,就像我隔一天打开你这个站,评论框里面的信息都能完整保存。。我添加的是 https://www.shephe.com/wp-content/themes/impeka/js/extra-plugins.js?ver=0.1
8个月前 · 重庆 · Google Chrome 123 Windows 10
@KK 这不需要加代码啊,wp后台-设置-讨论-其他评论设置,有一个显示评论cookies复选框,允许设置评论作者cookies的选项,选中就可以了
8个月前 · 合肥 · Firefox 124 Windows 10
@皇家元林 还真是。。。这个地方竟然没注意,还在瞎添加代码,谢谢
8个月前 · 重庆 · Google Chrome 123 Windows 10
那是qq 泄露用户信息,
8个月前 · 重庆 · Google Chrome 123 Windows 10
又实现了一个功能,棒!
8个月前 · 嘉兴 · Google Chrome 119 Windows 10
@织梦岁月 一个很少人需要的功能.
8个月前 · 合肥 · Firefox 124 Windows 10
@皇家元林 很不错,对经常在外面的人来说,很实用。
8个月前 · 嘉兴 · Google Chrome 119 Windows 10