首页 > 解决方案 > WP:如何根据位置更改电话号码

问题描述

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

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

标签: phpwordpressgeolocationlocationip-geolocation

解决方案


几件事。

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

除非所有这些,您都可以使用类似的资源ipstack

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

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

WordPress 有一个内置的远程 URL 功能wp_remote_get(),您可以使用它来获取此值。

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

为了更好地处理 ipstack(以及您的请求限制),您可能应该使用WP_TransientsAPI 将其缓存至少 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';
}

推荐阅读