在手动保存帖子之前,ACF字段值不可用

时间:2016-03-23 14:32:12

标签: wordpress advanced-custom-fields

我有一些自定义帖子类型“视频”,我添加了一些自定义ACF字段(“video_path”,“author_name”和“audio_author”)。我正在以这种方式生成该类型的帖子:

$video_post_params = array(
  'post_title'    => wp_strip_all_tags($video_title),
  'post_status'   => 'publish',
  'post_author'   => 1,
  'post_type'     => 'video'
);
$video_id  = wp_insert_post( $video_post_params );
update_field('video_path', $video_path, $video_id);
update_field('author_name', $video_author, $video_id);
update_field('audio_author', $audio_author, $video_id);

所有值插入都很好 - 当我在后端打开帖子时一切都很好。但是,当我尝试使用这些值时,我什么都没得到?!?

我正在读取模板文件中的值,如下所示:

get_field('video_path', $video_id)

如果我打开帖子并且保存它而没有任何改变,一切都开始正常工作,之后我会正常发布ACF字段。从后端手动创建的帖子一直运行良好。

我做错了什么?从代码生成帖子时,我还需要一些额外的步骤吗?

此处报告此问题: http://support.advancedcustomfields.com/forums/topic/programmatic-post-insertion-acf-fields-and-the-save_post-hook/

但是这个解决方案显然不适合我 - 我的update_field()函数已经在wp_insert_post()之后立即生效。

4 个答案:

答案 0 :(得分:6)

发现它!

插入ACF时,必须使用字段值字段键。如果使用了键名,就像我一样,所有内容都会在初看时很好地插入,但是在手动保存帖子之前,值不可用。所以它就像:

update_field('field_56e683ab6265f', $video_path, $video_id);
update_field('field_56e68415b5c4b', $video_author, $video_id);
update_field('field_56e6842d58740', $audio_author, $video_id);

多么糟糕......

答案 1 :(得分:0)

如果要使用字段名称代替字段关键字,则可以使用add_post_meta

例如:

add_post_meta($video_id, 'video_path', $video_path, true);
add_post_meta($video_id, 'author_name', $video_author, true);
add_post_meta($video_id, 'audio_author', $audio_author, true);

答案 2 :(得分:0)

使用ACF5时,您必须使用的不是发布ID,而是发布对象,湖泊:

update_field('field_56e683ab6265f', $video_path, $video);
update_field('field_56e68415b5c4b', $video_author, $video);
update_field('field_56e6842d58740', $audio_author, $video);

答案 3 :(得分:0)

我遇到了同样的问题,我只需在脚本末尾添加do_action('acf/save_post', $postID);即可解决问题,仅此而已...