1

我需要根据用户的 ip 位置在主页上显示不同的电话号码。它将用于动态和不断变化的商店位置。因此,如果用户访问该站点并且他们的 IP 位置在我们的其中一家商店的 50 英里范围内,则会显示该商店编号。如果我们在其所在地 50 英里范围内没有商店,则将显示默认编号。当我们开设一家新商店时,我们会将电话号码和城市(或 zip,无论需要什么)添加到 Wordpress 中的自定义字段中。我需要使用这些数据来进行地理定位。

我读过无数文章,知道我需要连接到像 max mind 这样的数据库,但我不知道如何做半径部分。谁能指出我正确的方向?一个插件或免费服务可以让我大部分时间到达那里?

谢谢你。

4

2 回答 2

2

需要做很多事情。

  1. 浏览器会让用户知道您正在尝试检测他们的位置,并为用户提供拒绝地理定位尝试的选项。如果他们这样做,您需要有一个后备,例如您的商店的搜索页面或显示特定商店的编号,而不是显示总部。

  2. 如果用户接受地理定位尝试,您可以根据许多计算来计算他们的接近度,例如本教程第 3 步中提供的计算。对于工作示例,请查看Bjorn 的商店定位器插件,该插件完美运行,并带有许多 UI 选项和在任何演示页面的搜索结果中可见的工作半径检测。您还可以深入研究他的代码,看看他是如何计算半径的,或者他曾经这样做过哪些第三方函数。

  3. 如果您在 wordpress 中实现此功能,您可能需要为其编写一个简单的插件并创建一个简单的短代码以与它一起使用,或者将您的函数添加到 functions.php 文件中,尽管最好编写一个插件并保留您的因此,工作有条理,以后更容易编辑/维护。

于 2013-09-09T05:12:18.980 回答
1

看看http://www.geoplugin.com/webservices/php

echo var_export(unserialize(file_get_contents('http://www.geoplugin.net/php.gp?ip='.$_SERVER['REMOTE_ADDR'])));

输出

array ( 'geoplugin_request' => '50.143.52.48', 'geoplugin_status' => 200, 'geoplugin_credit' => '一些返回的数据包括 MaxMind 创建的 GeoLite 数据,可从 http://www.maxmind.com获得。 ', 'geoplugin_city' => 'Pompano Beach',
'geoplugin_region' => 'FL', 'geoplugin_areaCode' => '954',
'geoplugin_dmaCode' => '528', 'geoplugin_countryCode' => 'US',
'geoplugin_countryName ' => '美国',
'geoplugin_continentCode' => 'NA', 'geoplugin_latitude' => '26.2442', 'geoplugin_longitude' => '-80.205902',
'geoplugin_regionCode' => 'FL', 'geoplugin_regionName' => '佛罗里达', 'geoplugin_currencyCode' => 'USD', 'geoplugin_currencySymbol' => '$', 'geoplugin_currencySymbol_UTF8' => '$',
'geoplugin_currencyConverter' => '1', )

PHP 类

<?php
require_once('geoplugin.class.php');
$geoplugin = new geoPlugin();
// If we wanted to change the base currency, we would uncomment the following line
// $geoplugin->currency = 'EUR';

$geoplugin->locate();

echo "Geolocation results for {$geoplugin->ip}: <br />\n".
    "City: {$geoplugin->city} <br />\n".
    "Region: {$geoplugin->region} <br />\n".
    "Area Code: {$geoplugin->areaCode} <br />\n".
    "DMA Code: {$geoplugin->dmaCode} <br />\n".
    "Country Name: {$geoplugin->countryName} <br />\n".
    "Country Code: {$geoplugin->countryCode} <br />\n".
    "Longitude: {$geoplugin->longitude} <br />\n".
    "Latitude: {$geoplugin->latitude} <br />\n".
    "Currency Code: {$geoplugin->currencyCode} <br />\n".
    "Currency Symbol: {$geoplugin->currencySymbol} <br />\n".
    "Exchange Rate: {$geoplugin->currencyConverter} <br />\n";

if ( $geoplugin->currency != $geoplugin->currencyCode ) {
    //our visitor is not using the same currency as the base currency
    echo "<p>At todays rate, US$100 will cost you " . $geoplugin->convert(100) ." </p>\n";
}

/* find places nearby */
$nearby = $geoplugin->nearby();
if ( isset($nearby[0]['geoplugin_place']) ) {
    echo "<pre><p>Some places you may wish to visit near " . $geoplugin->city . ": </p>\n";
    foreach ( $nearby as $key => $array ) {

        echo ($key + 1) .":<br />";
        echo "\t Place: " . $array['geoplugin_place'] . "<br />";
        echo "\t Country Code: " . $array['geoplugin_countryCode'] . "<br />";
        echo "\t Region: " . $array['geoplugin_region'] . "<br />";
        echo "\t County: " . $array['geoplugin_county'] . "<br />";
        echo "\t Latitude: " . $array['geoplugin_latitude'] . "<br />";
        echo "\t Longitude: " . $array['geoplugin_longitude'] . "<br />";
        echo "\t Distance (miles): " . $array['geoplugin_distanceMiles'] . "<br />";
        echo "\t Distance (km): " . $array['geoplugin_distanceKilometers'] . "<br />";

    }
    echo "</pre>\n";
}
?>

这将输出:

Geolocation results for 50.143.52.48: 
City: Pompano Beach 
Region: FL 
Area Code: 954 
DMA Code: 528 
Country Name: United States 
Country Code: US 
Longitude: -80.205902 
Latitude: 26.2442 
Currency Code: USD 
Currency Symbol: $ 
Exchange Rate: 1 

Some places you may wish to visit near Pompano Beach:
1:
     Place: Whispering Pines Addition Mobile Home Park
     Country Code: US
     Region: Florida
     County: 
     Latitude: 26.2711000
     Longitude: -80.1442900
     Distance (miles): 4.25 
     Distance (km): 6.83 
2:
     Place: Coral Springs
     Country Code: US
     Region: Florida
     County: 
     Latitude: 26.2711900
     Longitude: -80.2706000
     Distance (miles): 4.42 
     Distance (km): 7.12 
3:
     Place: Pompano Beach
     Country Code: US
     Region: Florida
     County: 
     Latitude: 26.2378600
     Longitude: -80.1247700
     Distance (miles): 5.05 
     Distance (km): 8.12 
4:
     Place: Rock Island
     Country Code: US
     Region: Florida
     County: 
     Latitude: 26.1550900
     Longitude: -80.1769900
     Distance (miles): 6.41 
     Distance (km): 10.32 
5:
     Place: Lighthouse Point
     Country Code: US
     Region: Florida
     County: 
     Latitude: 26.2756400
     Longitude: -80.0872700
     Distance (miles): 7.66 
     Distance (km): 12.34 
于 2013-09-09T04:51:28.340 回答