Плагин Wordpress обновляет настраиваемые поля только после сохранения вручную - PullRequest
0 голосов
/ 06 мая 2020

У меня есть плагин, который извлекает сообщения из 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 до сохранения сообщения. Кто-нибудь еще сталкивался с подобной проблемой?

...