投稿ページを保存または更新するたび、フックを使い、住所から緯度と経度を取得する仕組みを作っていました。
少し前まで問題なく緯度・経度を取得できていたのですが、いつの間にか取得できなくなっていました。
調べたところ「Google MapのAPIが必要になっていた」というのが原因のようでした。
さっそくAPIを取得し、コードに盛り込んだのですが、以前のように緯度・経度が取得できません。
コードがおかしいのだと思うのですが、問題点を教えていただけませんでしょうか。
ちなみに「functions.php」のコードです。
カッコ内はそれぞれのフィールド名です。
住所(address)
緯度(lat)
経度(lon)
APIキーはXXXXXXXXXXXXXXXXXと書かせていただいております。
functions.phpのコードです。
add_action('save_post','set_cf_latlng'); function geocode($address){ $req ='http://maps.googleapis.com/maps/api/geocode/xml'; $req .='?address='.urlencode($address); $req .='&key=XXXXXXXXXXXXXXXXX'; $req .='&sensor=false'; $xml = simplexml_load_file($req) or die('XML parsing error'); if ($xml->status =='OK') { $loc[0] = (string)$xml->result->geometry->location->lat; $loc[1] = (string)$xml->result->geometry->location->lng; } return $loc; } function set_cf_latlng($postID){ if($parent_id = wp_is_post_revision($postID)) { $postID = $parent_id; } $address = get_post_meta($postID , 'address',true); if( $address ){ $location = geocode($address); if ( !add_post_meta($postID, 'lat', $location[0], true) ) update_post_meta($postID,'lat', $location[0] ); if ( !add_post_meta($postID, 'lon', $location[1], true) ) update_post_meta($postID,'lon', $location[1] ); }else{ delete_post_meta($postID ,'lat'); delete_post_meta($postID ,'lon'); } }
https://webservicies.net/googlemaps-api/
2018年6月11以降にGoogleMapsAPIを使用する際は
必ずAPIキーを発行しなければならず
かつ課金アカウントを登録し
プロジェクト(APIキー)と紐付けなければなりません
とのことです
>|php|
add_action('save_post','set_cf_latlng');
function geocode($address){
$req ='http://maps.google.com/maps/api/geocode/xml';
$req .='?address='.urlencode($address);
$req .='&sensor=false';
$xml = simplexml_load_file($req) or die('XML parsing error');
if ($xml->status =='OK') {
$loc[0] = (string)$xml->result->geometry->location->lat;
$loc[1] = (string)$xml->result->geometry->location->lng;
}
return $loc;
}
function set_cf_latlng($postID){
if($parent_id = wp_is_post_revision($postID))
{
$postID = $parent_id;
}
$address = get_post_meta($postID , 'address',true);
if( $address ){
$location = geocode($address);
if ( !add_post_meta($postID, 'lat', $location[0], true) ) update_post_meta($postID,'lat', $location[0] );
if ( !add_post_meta($postID, 'lon', $location[1], true) ) update_post_meta($postID,'lon', $location[1] );
}else{
delete_post_meta($postID ,'lat');
delete_post_meta($postID ,'lon');
}
}
||<