WordPressでGoogleMapAPIを使用して登録時に住所から緯度経度を取得してDBに保存する方法について記します。
GoogleMapAPIのキーの取得、Geocordingの有効化は済んでいるものと想定して進めさせていただきます。
記述場所はfunctions.phpです。
①記事の公開時、更新時に動く関数を用意する
registerLatLngForGoogleMap(){
//この中に処理を書いていく
}
add_action( 'acf/save_post', 'registerLatLngForGoogleMap');
②記事IDから住所を取得する
※以降はregisterLatLngForGoogleMap関数の中に書いていきます。
二行目はカスタムフィールドで住所を登録している場合の記述になります。
$post_id = get_the_ID();
$addr = get_post_meta($post_id, "カスタムフィールド名", true);
③PHPでジオコーディング
Google Maps APIのGeocodingが有効になっている必要があります。
住所から緯度経度などの位置情報を返してくれます。
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"https://maps.googleapis.com/maps/api/geocode/xml?address=".$addr."&sensor=false&key=APIキー");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
④取得結果から緯度経度を抜き出す
$xml = new SimpleXMLElement($reslut);
$lat = (String)$xml->result[0]->geometry[0]->location[0]->lat;
$lng = (String)$xml->result[0]->geometry[0]->location[0]->lng;
curl_close($ch);
⑤DBに保存
update_post_meta($post_id, 'lat', $lat);
update_post_meta($post_id, 'lng', $lng);
以上、WordPressでGoogleMapAPIを使用して登録時に住所から緯度経度を取得してDBに保存する方法でした。
※参考サイト
How to use Google’s Geocoding and Maps APIs with PHP and MySQL | RedKite Websites
ソースコード全文
最後に全文コードを載せておきます。
registerLatLngForGoogleMap(){
//記事IDから住所を取得する
$post_id = get_the_ID();
$addr = get_post_meta($post_id, "カスタムフィールド名", true);
//PHPでジオコーディング
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"https://maps.googleapis.com/maps/api/geocode/xml?address=".$addr."&sensor=false&key=APIキー");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
//取得結果から緯度経度を抜き出す
$xml = new SimpleXMLElement($reslut);
$lat = (String)$xml->result[0]->geometry[0]->location[0]->lat;
$lng = (String)$xml->result[0]->geometry[0]->location[0]->lng;
curl_close($ch);
//DBに保存
update_post_meta($post_id, 'lat', $lat);
update_post_meta($post_id, 'lng', $lng);
}
add_action( 'acf/save_post', 'registerLatLngForGoogleMap');
コメント