ACF update_field() 插入值,但 get_field() 无法访问

问题描述 投票:0回答:1

我从第 3 方 API 获取对象并为每个对象创建一个帖子。

创建了两种帖子类型

object
aruodas-object
(第 3 方 API 对象类型)。有一个字段组
object
,其中包含
object
的所有自定义字段,还有一个字段组
aruodas
,用于第 3 方对象的一些其他自定义值。

我的functions.php中有这段代码

$ad = array('post_type' => 'aruodas-object', 'post_status' => 'publish');
switch($ads[0]['objTypeId']){
    case '1':
        $ad['post_id'] = $ads[0]['Id'];
        $ad['post_title'] = $ads[0]['addressLong'];
        $ad['post_excerpt'] = $ads[0]['addressLong'];
        $ad['post_date'] = $ads[0]['AddExpDate'];
        $ad['post_date_gmt'] = get_gmt_from_date($ads[0]['AddExpDate']);
        $ad['post_author'] = get_users(array('nicename' => substr($ads[0]['notes'], -6), 'fields' => 'ID'))[0];

        //Custom
        $ad['object_parduotas'] = $ads[0]['Sold'];
        $ad['object_tipas'] = 'butas';
        $ad['object_veiksmas'] = 'Pardavimui';
        ...
        break;
    default:
        break;
}

$existing_post = get_page_by_title($ad['post_title'], OBJECT, 'aruodas-object');

if (null === $existing_post) {
    $id = wp_insert_post($ad);

    foreach($ad as $key => $value){
        if(str_starts_with($key, 'object_')){
            update_field($key, $value, $id);
        }
    }

    //3rd party only fields from different group

    update_field('nuotraukos', array_map(function($url){return ['url' => $url];}, $ad['nuotraukos']), $id);
    update_field('thumbnail', $ad['thumbnail'], $id);
}

帖子已成功创建并插入了值,但在

page-objektai.php
中,
get_field()
返回
null
,直到我转到新创建的帖子并更新它,然后它才能按预期工作。

<?php while ( $result->have_posts() ) : $result->the_post(); ?>
        <?php $objectData = get_field('object');
        // if(!$objectData) return;
        switch($objectData['objekto_tipas']){
        ...
        ?>
        //HTML card
?>

我认为这可能是缓存的问题,但我发现的任何解决方案都没有帮助,还使用

update_field()
中的键的字段值,甚至在创建帖子时都不会在字段中插入值.

php wordpress advanced-custom-fields
1个回答
0
投票

解决方案:

首先,要保存新帖子,请在

field_key
中使用
update_field()

就我而言,我有字段组

object
,其中有一个组字段
object
,充当中继器字段。要访问它,我总是使用
object_{field_name}
,但是对于插入,您不能只指定组字段中每个字段的键,您必须传递一个
field_key => value
数组。

我将 $ad 数组更改为

$ad['field_6591851000d4a'] = $ads[0]['Sold']; //object_parduotas
$ad['field_646b96f1d26d7'] = 'butas'; //object_tipas
$ad['field_646b9784d26d8'] = 'Pardavimui'; //object_veiksmas
$ad['field_6533fa8370c23'] = getCity($ads[0]['city']); //object_savivaldybė
$ad['field_657ea8601a3ae'] = getCity($ads[0]['city']); //object_miestas
...

插入循环改为这样:

$id = wp_insert_post($ad);

$fields = array();
foreach($ad as $key => $value){
    if(str_starts_with($key, 'field_')){
        $fields[$key] = $value;
        // update_field($key, $value, $id);
    }
}
//print_r($fields);
update_field('object', $fields, $id);
© www.soinside.com 2019 - 2024. All rights reserved.