我已经写了一个函数来采取一些自定义分类法和&在这种情况下发布标题(街道(帖子标题),城市,州,邮编)并将它们地理编码为纬度/经度以保存到自定义字段_ct_latlng
。
问题是它没有在保存或更新后触发。任何帮助表示赞赏!
function ct_geocode_address($post_id) {
global $post;
if($_POST['post_type'] != 'listings')
return;
$city = wp_get_post_terms($post_id, 'city');
$city = $city[0];
$city = $city->name;
$state = wp_get_post_terms($post_id, 'state');
$state = $state[0];
$state = $state->name;
$zip = wp_get_post_terms($post_id, 'zipcode');
$zip = $zip[0];
$zip = $zip->name;
$street = get_the_title($post_id);
if($street && $city) {
global $post;
$url = "http://maps.googleapis.com/maps/api/geocode/json?address=".urlencode($street.' '.$city.', '.$state.' '.$zip)."&sensor=false";
$resp = wp_remote_get($url);
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;
print $latitude.','.$longitude;
update_post_meta($post_id, "_ct_latlng", $latitude.','.$longitude);
}
}
}
}
add_action('save_post', 'ct_geocode_address');
答案 0 :(得分:0)
尝试替换
if($_POST['post_type'] != 'listings')
与
$post = get_post( $post_id );
if($post->post_type != 'listings')
更新:
问题是您正在以默认优先级10运行ct_geocode_address
功能。
您在主题中的其他位置有代码,用于更新手动输入到商品详情元框中的值。手动输入的值将通过ct_geocode_address()覆盖设置的值。这意味着该字段正在保存,但随后它将根据edit.php发送的$ _POST值再次保存。
更改
add_action('save_post', 'ct_geocode_address');
到
add_action('save_post', 'ct_geocode_address', 999);
这将有效。
答案 1 :(得分:0)
自定义帖子类型slugs往往是单数 - 也许这只是一个打错你的错字?尝试针对listing
(单数)而不是listings
(复数)进行测试。当然,这只取决于你如何定义CPT。
另外,请尝试使用get_post_type()功能进行测试。
if( get_post_type( $post_id ) != 'listing' )
答案 2 :(得分:0)
$lan = $latitude.','.$longitude;
update_post_meta($post_id, "_ct_latlng", $lan);