Php 保存WordPress后自定义字段未更新
我编写了一个函数,用于获取一些自定义分类法&本例中的post title(街道(post title)、city、state、zip),并将其地理编码为lat/long以保存到自定义字段Php 保存WordPress后自定义字段未更新,php,wordpress,Php,Wordpress,我编写了一个函数,用于获取一些自定义分类法&本例中的post title(街道(post title)、city、state、zip),并将其地理编码为lat/long以保存到自定义字段\u ct\u latlng 问题在于它在保存或更新后不启动。感谢您的帮助 function ct_geocode_address($post_id) { global $post; if($_POST['post_type'] != 'listings') return;
\u ct\u 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');
试着替换
if($_POST['post_type'] != 'listings')
与
更新:
问题是您正在以默认优先级10运行ct\u geocode\u address
函数
主题中的其他地方有代码,用于更新手动输入到列表元框中的值。手动输入的值将覆盖通过ct_geocode_address()设置的值。这意味着该字段正在保存,但它将根据edit.php发送的$\u POST值再次保存
改变
add_action('save_post', 'ct_geocode_address');
到
那就行了。自定义的post类型的slug往往是单数的——也许只是一个打字错误把你绊倒了?试着测试
列表
(单数)而不是列表
(复数)。当然,这取决于您如何定义CPT
另外,尝试使用该函数进行测试
如果尝试(获取帖子类型($post\u id)!='listing')
相同的结果不会在更新或新帖子时用lat/long填充自定义字段。您是通过标准编辑屏幕还是通过wp\u update\u post()更新帖子?你能确认你的save函数正在启动吗?最好的测试方法是什么?快速而肮脏的方法是添加一个die('1')代码>到您的代码。如果屏幕变为空白并显示1,那么它就工作了。谢谢,但肯定是列表。不幸的是,不行。
add_action('save_post', 'ct_geocode_address');
add_action('save_post', 'ct_geocode_address', 999);
$lan = $latitude.','.$longitude;
update_post_meta($post_id, "_ct_latlng", $lan);