原文转自:iT敢客
作者:iT敢客

今天博主在逛其他博客的时候,发现有好多博主的侧边栏都有个显示访问者 IP 信息的地方,也还有显示地理位置的信息,看我也心里想要这个功能。于是就开始找了半天,发现网站的许多 wordpress 获取访问者 IP 的都不行!于是最后自己找了一个如下的代码,可以完全实现,将下面的代码放在主题 functions.php 里面即可。

//显示访客所在地
function get_the_user_ip(){
if(!empty($_SERVER["HTTP_CLIENT_IP"]))
{
$cip = $_SERVER["HTTP_CLIENT_IP"];
}
else if(!empty($_SERVER["HTTP_X_FORWARDED_FOR"]))
{
$cip = $_SERVER["HTTP_X_FORWARDED_FOR"];
}
else if(!empty($_SERVER["REMOTE_ADDR"]))
{
$cip = $_SERVER["REMOTE_ADDR"];
}
else
{
$cip = '';
}
preg_match("/[\d\.]{7,15}/", $cip, $cips);
$cip = isset($cips[0]) ? $cips[0] : 'unknown';
unset($cips);
return $cip;
}

如果要显示出 ip 可以用下面的语句:

<?php echo get_the_user_ip();?>
如果是函数内部调用就
$ip = get_the_user_ip();

然后如果想显示出 ip 的地理位置,这个就需要其他第三方 api 来实现了,我用的是高德开放平台的 api,还可以!代码如下了!

function wp_gaode_map_remote_request($url, $method='get', $body=''){
if($method == 'get'){
$args = array('headers' =&gt; array('Accept-Encoding'=&gt;''), 'sslverify'=&gt;false, 'body'=&gt;$body);
$response = wp_remote_get($url, $args);
}elseif($method == 'post'){
$args = array('headers' =&gt; array('Accept-Encoding'=&gt;''), 'sslverify'=&gt;false, 'body'=&gt;$body);
$response = wp_remote_post($url, $args);
}
if(is_wp_error($response)){
return false;
}
$response = json_decode($response['body']);

if(!empty($response-&gt;error)){
return false;
}
return $response;
}
function wp_getLocation($ip=''){
$ip = get_the_user_ip();
if($ip=="127.0.0.1") {
return "本机地址";
}
$url = "https://restapi.amap.com/v3/ip?ip=". $ip ."&amp;output=json&amp;key=高德 api 的 key";
$response = wp_gaode_map_remote_request($url);
if(!$response){
return false;
}
$data = '';

$data .= $response-&gt;province;
$data .= $response-&gt;city;
return $data;
}

然后在你想要展示的地方用下面的语句展示出来;

<?php echo wp_getLocation();?>
如果是函数内部调用就
$location = wp_getLocation();

注:记得替换上面的“高德的API”噢

Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.