Заранее благодарны за Вашу помощь.
У меня есть WordPress сайт, на котором работает woocommerence, и я настроил его как мультисайт.
По сути, я управляю бизнесом, который поставляет McDonald’s и KFC клиентам. У каждой области есть свой собственный сайт, который является частью мультисайта, который я настроил.
Основной сайт, который функционирует, чтобы дать пользователю ссылку на мультисайт, который доставляет в их область.
Мне нужно запустить простой код на главном сайте, поэтому, когда пользователь вводит свой почтовый индекс или деревню, он переносит их в правую часть мультисайта.
Например, www.foodtoyourdoor.co.uk является основным сайтом, и пользователь вводит свой почтовый индекс или говорит, что деревня «Дарем», когда пользователь нажимает клавишу ввода, переводит их непосредственно в durham.foodtoyourdoor.co.uk.
Я смотрю на youtube уже несколько недель и не могу найти ничего, чтобы помочь мне.
Первый шаг, который вам нужно сделать, это сохранить долготу и широту сайтов в базе данных. Когда вы это сделаете, вы можете также преобразовать опубликованный адрес клиента в долготу и широту:
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);
}
Других решений пока нет …