我从第 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()
中的键的字段值,甚至在创建帖子时都不会在字段中插入值.
解决方案:
首先,要保存新帖子,请在
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);