Php 根据IP位置的半径显示不同的内容?

Php 根据IP位置的半径显示不同的内容?,php,wordpress,geolocation,Php,Wordpress,Geolocation,我需要根据用户的ip位置在主页上显示不同的电话号码。这将是一个动态的和不断变化的门店数量。因此,如果用户访问该站点,并且他们的ip地址位于我们其中一家店铺的50英里以内,则会显示该店铺编号。如果我们在他们所在地50英里内没有商店,将显示默认号码。当我们开一家新店时,我们会在Wordpress中的一个自定义字段中添加电话号码和城市(或zip,无论需要什么)。这些数据就是我需要用来进行地理定位的数据 我读过无数的文章,知道我需要连接到像max mind这样的数据库,但我不知道如何做半径部分。谁能给我

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

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

谢谢。

看看

输出

数组('geoplugin\u请求'=>'50.143.52.48','geoplugin\u状态' =>200,“geoplugin_credit”=>“一些返回的数据包括MaxMind创建的GeoLite数据,可从 .,“geoplugin_city”=>“蓬帕诺海滩”,
“geoplugin_region”=>“FL”,“geoplugin_区域代码”=>“954”,
“geoplugin\u dmaCode”=>“528”、“geoplugin\u countryCode”=>“美国”,
“geoplugin_countryName”=>美国,
“geoplugin\u大陆代码”=>“NA”,“geoplugin\u纬度”=> “26.2442”,“地理柱经度”=>“-80.205902”,
“geoplugin_regionCode'=>“FL”,“geoplugin_regionName'=>“Florida”, “geoplugin\u currencyCode'=>美元”,“geoplugin\u currencySymbol'=> “$”,“geoplugin\u currencySymbol\u UTF8”=>“$”,
“geoplugin\u 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";
}
?>

需要做很多事情

  • 浏览器会让用户知道您正在尝试检测他们的位置,并给用户一个拒绝地理定位尝试的选项。如果他们这样做,您需要有一个后备功能,例如搜索您的店铺或显示特定店铺的号码,例如总部

  • 如果用户接受地理定位尝试,您可以根据大量计算(如的步骤3中提供的计算)计算其距离。对于工作示例,请查看哪个工作完美无瑕,并且在任何演示页面的搜索结果中都可以看到许多UI选项和工作半径检测。您还可以深入研究他的代码,看看他是如何计算半径的,或者他使用哪些第三方函数来计算半径的

  • 如果您在wordpress中实现此功能,您可能需要为其编写一个简单的插件,并创建一个简单的短代码与之一起使用,或者将您的函数添加到functions.php文件中,不过最好编写一个插件,使您的工作井然有序,并且更易于以后的编辑/维护


  • 我希望我的IP地址的解析地理位置像你建议的那样准确(使用公开可用的数据库;NSA可能有这样的数据),否则我真的应该开始更认真地研究TOR。你应该将php和word press标签添加到我看到的大多数网站,询问用户位置,我认为这是一个更好的主意,你在wordpress数据库中启用了PDO??谢谢。我认为只有使用基于GPS的地理定位系统,才会出现地理定位提示。如果它只是基于IP,它也会这样做吗?我意识到它不如GPS准确…如果使用基于GPS的定位,则会始终出现提示,但我不确定是否会出现基于IP的定位。不过GPS的精确度肯定更好。谢谢你,这看起来很有希望。虽然附近的建议似乎是maxmind提供的通用位置。我必须弄清楚如何整合我自己的门店。
    <?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