Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 保存WordPress后自定义字段未更新_Php_Wordpress - Fatal编程技术网

Php 保存WordPress后自定义字段未更新

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;

我编写了一个函数,用于获取一些自定义分类法&本例中的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;

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