Как перенести значение настраиваемого поля (плагин ACF) в ловушку WordPress save_post?

Я использую плагин Advance Custom Fields для создания некоторых пользовательских полей.
При создании нового поста или поста обновления мне нужно использовать api (vimeo) для переноса значений в другое настраиваемое поле.

Пример:

  • 1 поле: ID видео
  • 2 поле: длительность
  • 3 поля: количество игр

Я ввожу значение в первое поле, нажимаю «Опубликовать» и использую этот хук:

add_action( 'save_post', 'vimeo_api', 10, 2 );
function vimeo_api( $post_id, $post ) {
// request to vimeo with video ID
update_post_meta( $post_id, 'video-duration', $vimeo_single['body']['duration']);
update_post_meta( $post_id, 'video-plays', $vimeo_single['body']['stats']['plays'] );
}

Если я жестко закодирую Vimeo ID — это работает!

Но я не могу получить значение из поля 1.

Например, я могу получить значение заголовка сообщения следующим образом:

$title = $post->post_type;

Но это не работает с полем ACF.

В инструментах разработчика я вижу это во вкладке «заголовки», данные формы:

_wpnonce:83ab5bcf5f
_wp_http_referer:/wp-admin/post.php?post=37&action=edit&message=1
user_ID:1
action:editpost
originalaction:editpost
post_author:1
post_type:video
...
fields[field_5423b0bb92209]:
fields[field_5423aff492207]:103222207
fields[field_5423b04192208]:
fields[field_5424dd92c4f3d]:

Это сообщение об ошибке Предупреждение: Недопустимое смещение строки:

$vimeo_id = $post->fields['field_5423aff492207'];

0

Решение

Решено с помощью acf / save_post hook

function get_video_info_from_vimeo ($post_id) {

$vimeo_id = get_field('field_5423aff492207', $post_id); // get id

// use api and get $duration and $plays

// unhook this function so it doesn't loop infinitely
remove_action('acf/save_post', 'get_video_info_from_vimeo');

// update ACF Price Field
update_field( 'field_5423b04192208', $duration, $post_id );
update_field( 'field_5424dd92c4f3d', $plays, $post_id );

// re-hook this function
add_action('acf/save_post', 'get_video_info_from_vimeo');

}

add_action( 'acf/save_post', 'get_video_info_from_vimeo' );
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector