У меня есть плагин, который извлекает сообщения из API и синхронизирует их с локальным сайтом.
После получения сообщений я создал al oop, чтобы проверить, какие сообщения не были синхронизированы. Если есть сообщения новостей, запускается функция создания, в противном случае я просто обновляю настраиваемые поля.
foreach ( $this->posts as $post ) {
$local_post = $this->get_local_post( $post->acf->technical_name );
$local_post_ID = $local_post[0]->ID;
if ( empty( $local_post ) {
$local_post_ID = $this->insert_local_post( $post );
}
$this->update_local_fields( 'customfields1', $post->acf, $local_post_ID);
$this->update_local_fields( 'customfields2', $post->acf, $local_post_ID);
$this->update_local_fields( 'customfields3', $post->acf, $local_post_ID);
}
Функция создания:
function insert_local_post( $post ) {
$post_data = array(
'post_type' => 'mycustomposttype',
'post_status' => 'publish',
'comment_status' => 'closed',
'ping_status' => 'closed',
'post_author' => 1,
'post_name' => $post->slug,
'post_title' => $post->title->rendered,
'post_date' => $post->date,
'post_date_gmt' => $post->date_gmt
);
$new_post = wp_insert_post( $post_data );
return $new_post;
}
Функция обновления: (поле conf просто иерархическое множество имени дополнительных полей, таких же, как в выбранных сообщениях)
function update_local_fields( $field_group_name, $post_fields, $local_post_ID ) {
foreach ( $this->field_conf[$field_group_name] as $field_key => $field_name ) {
if ( ! is_numeric( $field_key ) ) {
$this->insert_local_repeater_fields( $field_key, $local_post_ID, $post_fields->$field_key, $field_group_name );
continue;
}
if ( $cis_fields->$field_name and
( $field_name == 'customfields1' or
$field_name == 'customfields2' or
$field_name == 'customfields3' ) ) {
$post_fields->$field_name = $this->link_to_local_taxonomy_terms( $post_fields->$field_name );
}
$local_field_name = $this->site_prefix . $field_name;
update_field( $local_field_name, $post_fields->$field_name, $local_post_ID );
}
return;
}
Проблема возникает, когда я запускаю первую синхронизацию c. Все сообщения синхронизируются, но в настраиваемых полях нет данных. Но когда я вручную сохраняю сообщение и снова запускаю syn c, все поля заполняются. Кажется, что WP не видит поля ACF до сохранения сообщения. Кто-нибудь еще сталкивался с подобной проблемой?