2013-11-07 7 views
1

Я использую User Front End Pro, чтобы предоставить регистрационную форму переднего конца. Одна строка для адреса, и я хочу использовать ее для отображения карты всех пользователей с помощью Geo Mashup.Геокодирование пользовательских мета в WordPress

У меня есть настраиваемое поле, которое сохраняется пользователю meta под названием geocode_address, мне нужно его геокодировать и выводить его на два отдельных поля Широта и долгота. Я нашел this for geocoding custom post data и попытался изменить его для пользователя meta, но он не работает и заставляет регистрацию зависать. Что я сделал не так?

function geocode_address($user_id) 
{ 
$custom_fields = get_user_meta(); 
if(isset($custom_fields["geocode_address"]) && !empty($custom_fields["geocode_address"][0])) 
{ 
    $resp = wp_remote_get("http://maps.googleapis.com/maps/api/geocode/json?address=".urlencode($custom_fields["geocode_address"][0])."&sensor=false"); 
    if (200 == $resp['response']['code']) { 
     $body = $resp['body']; 
     $data = json_decode($body); 
     if($data->status=="OK"){ 
      $latitude = $data->results[0]->geometry->location->lat; 
      $longitude = $data->results[0]->geometry->location->lng; 
      update_user_meta($user_id, "latitude", $latitude); 
      update_user_meta($user_id, "longitude", $longitude); 
     } 
    } 
} 
} 
add_action('update_user_meta', 'geocode_address'); 

В качестве примечания, Geomashup имеет функцию геокодировать пользовательское поле, но когда я вхожу «геокодирования адрес» это не похоже на работу ...

+0

Можете ли вы показать значение выборки для поля 'geocode_address'? – brasofilo

+0

Образец значения будет выглядеть так: «Vällebergsvägen 7 459 30 Ljungskile» –

ответ

2

Действие update_user_meta принимает больше аргументов и первый не ID пользователя:

add_action('update_user_meta', 'geocode_address', 10, 4); 

function geocode_address($meta_id, $user_id, $meta_key, $meta_value) 
{ 
    if('geocode_address' == $meta_key) 
    { 
     var_dump($meta_value); 
     die(); 
    } 
} 

Затем вы используете get_user_meta() неправильно, мы должны пройти по крайней мере, идентификатор пользователя: get_user_meta($user_id, $key = '', $single = false);. Но я подозреваю, что это не нужно в вашем случае.

Что касается Geocode API, он возвратил правильный ответ, когда я тестировал случайный испанский адрес:

$address = "gran via, madrid"; 
$resp = wp_remote_get("http://maps.googleapis.com/maps/api/geocode/json?address=".urlencode($address)."&sensor=false"); 
+0

Я изо всех сил пытаюсь заставить это работать, боюсь (немного выше моего таланта). Мне удалось заставить WPUFP автоматически геокодировать пользовательскую строку поля, которая получает мне 80% пути, но она выводит в одно поле как значение, разделенное запятой, что привело меня к этому вопросу: http: // stackoverflow. com/questions/19838810/split-comma-separated-values-into-separate-mysql-fields-with-a-wordpress-functio –

+1

Я считаю, что единственная проблема заключается в том, как обращаться с '$ meta_value'. «Var_dump» и «die'» помогают вам отлаживать и настраивать. – brasofilo

+0

Хорошо, у меня это сейчас. Но он все еще не работает: http://jsfiddle.net/LRR7y/ (слишком долго для комментариев) - Я действительно не парень PHP, поэтому я борюсь с этим ... –

 Смежные вопросы

  • Нет связанных вопросов^_^