WP:如何根据位置更改电话号码

时间:2018-05-07 20:11:07

标签: php wordpress geolocation location ip-geolocation

我目前正在为我的客户完成网站,唯一的功能是我无法实现的是根据位置向用户显示正确的电话号码。

我试图找到一些插件但没有成功。也许有人可以帮我处理我可以实现此功能的代码片段?谢谢!

1 个答案:

答案 0 :(得分:0)

一些事情。

由于地理位置可能会被欺骗,理想情况下,您会显示所有可用的号码并拥有主号码。或者甚至更好地根据访客获取和推荐来源通过脚本更改呼叫跟踪号码。

除非所有这些,您可以使用 ipstack 等资源

您使用您要使用的IP地址(可能是https://api.ipstack.com/?)和您的访问密钥向$_SERVER['REMOTE_ADDR']发出请求。因此,您的请求网址如下所示:

$ipstack_url = 'https://api.ipstack.com/123.456.789.001?access_key=YOURACCESSKEYHERE'

WordPress有一个内置的远程网址功能wp_remote_get(),可用于获取此值。

$geo_info = wp_remote_retrieve_body( wp_remote_get( $ipstack_url ) );

为了对ipstack(以及你的请求限制)很好,你应该用 WP_Transients API缓存它至少24小时(这些结果不会有太大变化,所以如果你愿意,你可以缓存更长时间)。您每月免费获得10k请求,因此如果您拥有高流量网站,则更为重要

现在,您可以使用该IP地址的ipstack请求执行您想要的操作,例如根据当前城市显示不同的电话号码。

如果我们将所有这些结合起来,你会得到这样的结果:

// Get your IP however you want
$ip_addr = $_SERVER['REMOTE_ADDR'];

// You'll need an API Key
$api_key = 'YOURACCESSKEYHERE';

// Build your API URL
$api_url = "https://api.ipstack.com/$ip_addr?access_key=$api_key"; // Build the API Url

// Give your transient a unique, yet identifiable name
$transient_name = "ipstack-$ip_addr";

// Check for our transient, if it's not there set it for 24 hours
if( false === ( $transient = get_transient( $transient_name ) ) ){
    set_transient( $transient_name, wp_remote_retrieve_body( wp_remote_get( $api_url ) ), 86400 );
}

// Decode the JSON response we got
$json = json_decode( get_transient( $transient_name ) );

// Do whatever you want with it
if( $json->city == 'Los Angeles' ){
    echo 'Phone For LA: 123-456-7890';
} else if( $json->city == 'San Francisco' ){
    echo 'Phone For SF: 321-654-0987';
} else {
    echo 'Default Phone: 098-765-4321';
}