【WP】登録時に住所から緯度経度を取得してDBに保存する

WordPress



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);




connaiconnai

④取得結果から緯度経度を抜き出す

$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');




コメント

タイトルとURLをコピーしました