#php #mysql #sql #wordpress #google-maps
#php #mysql #sql #wordpress #google-карты
Вопрос:
Здесь есть замечательный пример использования Google Maps для определения местоположения магазина: http://code.google.com/apis/maps/articles/phpsqlsearch_v3.html
В примере используется простая таблица с 3 столбцами — адрес, широта, долгота.
Я пытаюсь интегрировать это в wordpress, используя пользовательский тип записи для каждого нового местоположения, и мне успешно удалось сохранить значение адреса, широты и долготы в качестве метаданных вместе с каждой новой пользовательской записью.
Что мне сложно сделать, так это преобразовать эти данные / запрос в XML тем же способом, что и в примере Google.
Было бы неплохо просто сохранить все данные внутри пользовательских записей WordPress, не создавая целую отдельную таблицу для их обработки.
Вот стандартный пример запроса:
// Search the rows in the markers table
$query = sprintf("SELECT address, name, lat, lng, ( 3959 * acos( cos( radians('%s') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('%s') ) sin( radians('%s') ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < '%s' ORDER BY distance LIMIT 0 , 20",
mysql_real_escape_string($center_lat),
mysql_real_escape_string($center_lng),
mysql_real_escape_string($center_lat),
mysql_real_escape_string($radius));
$result = mysql_query($query);
Как бы вы подошли к имитации этого для работы с метаданными wordpress CPT?
Ответ №1:
Я понял это — это SQL-запрос:
SELECT wp_posts.post_title as name,
address.meta_value as address,
latitude.meta_value as lat,
longitude.meta_value as lng,
telephone.meta_value as telephone,
( 3959 * acos(
cos( radians( '%s' ) ) *
cos( radians( CONVERT( latitude.meta_value, DECIMAL( 10, 6 ) ) ) ) *
cos( radians( CONVERT( longitude.meta_value, DECIMAL( 10, 6 ) ) ) - radians( '%s' ) )
sin( radians( '%s' ) ) * sin( radians( CONVERT( latitude.meta_value, DECIMAL( 10, 6 ) ) ) )
) ) AS distance
FROM wp_posts
LEFT JOIN wp_postmeta AS address ON(
wp_posts.ID = address.post_id
AND address.meta_key = '_dealer_address'
)
LEFT JOIN wp_postmeta AS latitude ON(
wp_posts.ID = latitude.post_id
AND latitude.meta_key = '_dealer_latitude'
)
LEFT JOIN wp_postmeta AS longitude ON(
wp_posts.ID = longitude.post_id
AND longitude.meta_key = '_dealer_longitude'
)
LEFT JOIN wp_postmeta AS telephone ON(
wp_posts.ID = telephone.post_id
AND telephone.meta_key = '_dealer_telephone'
)
WHERE wp_posts.post_type = 'dealers' HAVING distance < '%s' ORDER BY distance LIMIT 0 , 20
Комментарии:
1. Я хочу добавить, что по состоянию на 2014 год это все еще работало у меня. Спасибо, Джо!