Как бы вы использовали мета-значение для имитации этого запроса Google Maps?

#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 год это все еще работало у меня. Спасибо, Джо!