如何在为自定义发布类型保存表单数据之前进行修改

时间:2014-01-30 作者:geoffs3310

我有一个诊所自定义的职位类型,有3个字段;一个文本区域用于显示诊所的地址,两个文本框用于显示纬度和经度。我希望用户在textarea中输入地址,然后当他们点击publish时,我需要连接,对地址进行地理编码,并填充要存储在数据库中的纬度和经度字段。如果成功,那么当他们来编辑诊所时,将填充纬度和经度字段。我有以下代码,但似乎不起作用:

function geocode_clinic() 
{
if($_POST[\'post_type\']==\'clinics\') 
{
    $address = urlencode($_POST[\'fields\'][\'field_52ea48969a9f2\']);

    // geocode the address
    $location = json_decode(file_get_contents("http://maps.google.com/maps/api/geocode/json?address=".str_replace(" ", "+", $address)."&sensor=false"));

    if ($data->status=="OK") {          
        $lat = $data->results[0]->geometry->location->lat;
        $lng = $data->results[0]->geometry->location->lng;
    } else {
        $lat = $lng = \'\';
    }

    $_POST[\'fields\'][\'field_52ea4b66b382f\'] = $lat;
    $_POST[\'fields\'][\'field_52ea4bccb3830\'] = $lng;
}
}
add_action(\'save_post\', \'geocode_clinic\');

1 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

save_post 太晚了,无法修改$_POST 数据本身,并希望将其填充到保存后操作(和修改$_POST 通常没有必要)。该帖子已在该点保存。Just check the source.

您可能应该做的是使用update_post_meta.

比如:

function geocode_clinic($post_id ) 
{
if($_POST[\'post_type\']==\'clinics\') 
{
    $address = urlencode($_POST[\'fields\'][\'field_52ea48969a9f2\']);

    // geocode the address
    $location = json_decode(file_get_contents("http://maps.google.com/maps/api/geocode/json?address=".str_replace(" ", "+", $address)."&sensor=false"));

    if ($data->status=="OK") {          
        $lat = $data->results[0]->geometry->location->lat;
        $lng = $data->results[0]->geometry->location->lng;
    } else {
        $lat = $lng = \'\';
    }

    update_post_meta($post_id,\'field_52ea4b66b382f\',$lat);
    update_post_meta($post_id,\'field_52ea4bccb3830\',$lng);
}
}
add_action(\'save_post\', \'geocode_clinic\');
我不确定这些是你想要的关键名字,但这就是想法。

结束

相关推荐

从unctions.php调用的Add_Actions未返回好值

我正试图通过这些功能为我的网站添加一些安全/访问防护。php。然而,每当我尝试通过函数添加时。php(而不是作为插件,我以前做过)失败(总是返回false)。例如:add_action(\"parse_query\", checkaccess()); // in functions.php 以及function checkaccess() { $allowAccess = false; if(is_admin()||is_front_page()||i