1

User Front End Proを使用して、フロント エンド登録フォームを提供しています。その 1 行は住所用であり、それを使用してGeo Mashupを使用してすべてのユーザーの地図を表示したいと考えています。

という名前のユーザー メタに保存するカスタム フィールドがgeocode_addressあり、それをジオコーディングして、緯度と経度の 2 つの別々のフィールドに出力する必要があります。カスタム投稿データをジオコーディングするためにこれを見つけ、ユーザー メタ用に修正しようとしましたが、機能せず、登録がハングします。私は何を間違えましたか?

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にはカスタムフィールドをジオコードする機能があるのですが、「ジオコードアドレス」を入力するとうまくいかないようです…

4

1 に答える 1

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()間違った使い方をしています。少なくとも User ID: を渡す必要があります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" );
于 2013-11-07T13:06:02.043 に答える