如何将自定义字段值(ACF插件)带到WordPress save_post挂钩?

时间:2014-09-26 04:30:26

标签: php wordpress advanced-custom-fields

我使用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'];

1 个答案:

答案 0 :(得分:1)

解决了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' );