邮编搜索并返回链接


Postcode search and return a link

提前感谢您的帮助。

我有一个运行woocommerce的wordpress网站,我把它设置成一个多站点。

基本上我经营的生意是给顾客送麦当劳和肯德基。每个区域都有自己的站点,这是我建立的多站点的一部分。

主要网站的功能是为用户提供到他们所在地区的多个网站的链接。

我需要在主站点上运行一个简单的代码,所以当用户在他们的邮政编码或村庄类型,然后它把他们带到多站点的正确部分。

例如,www.foodtoyourdoor.co.uk是主要网站,用户输入他们的邮政编码或村庄"Durham",当用户点击回车键时,它会直接将他们带到Durham .foodtoyourdoor.co.uk。

我一直在看你的频道几个星期,找不到任何帮助我。

需要做的第一步是在数据库中存储站点的经度和纬度。完成这些后,您可以将客户端的发布地址转换为经度和纬度:

function getLongitudeAndLatitude($address) {
    $url = 'http://maps.googleapis.com/maps/api/geocode/xml?sensor=false&language=nl&address=' . str_replace(' ','+', $address);
    $ch = curl_init();  
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $response = curl_exec($ch);
    curl_close($ch);  
    $obj = simplexml_load_string($response);
    $lat = null;
    $lon = null;
    if ($obj) {
        $obj = @$obj->result;
        $lat = (@$obj->geometry->location->lat.'');
        $lon = (@$obj->geometry->location->lng.'');
    }
    return array( 'latitude' => $lat, 'longitude' => $lon,);
}
有了这些数据,你就可以计算客户端和站点之间的距离。为此,您可以在mysql 中创建一个例程。
CREATE DEFINER=`user`@`localhost` FUNCTION `haversine`(`lat1` FLOAT, `lon1` FLOAT, `lat2` FLOAT, `lon2` FLOAT) RETURNS float
    NO SQL
    DETERMINISTIC
    COMMENT 'Returns the distance in degrees on the Earth             between two known points of latitude and longitude'
BEGIN
    RETURN 111.045*DEGREES(ACOS(
              COS(RADIANS(lat1)) *
              COS(RADIANS(lat2)) *
              COS(RADIANS(lon2) - RADIANS(lon1)) +
              SIN(RADIANS(lat1)) * SIN(RADIANS(lat2))
            ));
END
使用这个例程,您可以创建一个SQL,返回最近的站点
$user_location = getLongitudeAndLatitude($_POST['txt_address']);
if (isset($user_location['latitude']) && isset($user_location['longitude'])) {
    $stmt = $pdo->prepare('SELECT *, haversine(:lat1, :lon1, site.latitude, site.longitude) as distance FROM site ORDER BY distance LIMIT 1');
    $stmt->execute([':lat1' => $user_location['latitude'], ':lon1' => $user_location['longitude']);
    $res = $stmt->fetch(PDO::FETCH_ASSOC);
    var_dump($res);
}