Wordpress ACF字段值在手动保存post之前不可用

Wordpress ACF字段值在手动保存post之前不可用,wordpress,advanced-custom-fields,Wordpress,Advanced Custom Fields,我有一些自定义的帖子类型“video”,并在其中添加了一些自定义的ACF字段(“video\u path”、“author\u name”和“audio\u author”)。我以编程方式生成该类型的帖子,如下所示: $video_post_params = array( 'post_title' => wp_strip_all_tags($video_title), 'post_status' => 'publish', 'post_author' =&g

我有一些自定义的帖子类型“video”,并在其中添加了一些自定义的ACF字段(“video\u path”、“author\u name”和“audio\u 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)
所有的值都插入得很好——当我在后端打开帖子时,一切都很好。然而,当我尝试使用这些值时,我什么也得不到

我正在从如下模板文件中读取值:

$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字段。从后端手动创建的帖子一直运行良好

我做错了什么?从代码生成帖子时是否需要额外的步骤

这里报道了这一问题:

但是这个解决方案显然对我不起作用-我的
update\u field()
函数已经在
wp\u insert\u post()找到它之后立即出现了

插入ACF字段值时,必须使用字段键。若像我所做的那个样使用key name,那个么在第一眼看到的时候,所有内容都插入得很好,但在手动保存post之前,该值是不可用的。所以就像:

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

太乱了……

如果要使用字段名而不是字段键,可以使用

例如:

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);

使用ACF5时,您必须使用post对象,而不是post id:

update_字段('field_56e683ab6265f',$video_path,$video);
更新_字段('field_56e68415b5c4b',$video_author,$video);
更新_字段('field_56e6842d58740',$audio_author,$video);

我也遇到了同样的问题,我只需添加
do_action('acf/save_post',$postID')就可以纠正它在脚本的最后,就这些…

亲爱的上帝:D真是一团糟,被困在这个东西上3个小时了tnx非常感谢分享!不错,但不幸的是,它不适用于组字段中的子字段,因为“组字段在保存和加载值时同时使用父字段和子字段名称。例如,名为“hero”的组字段和名为“image”的子字段将使用元名称“hero_image”保存到数据库中”(请参阅:)。你有一个干净的工作环境吗?这将如何工作?我敢肯定不会的。您还需要更新字段键。@FooBar这假定video\u path、author\u name和audio\u author是有效的字段键。(或者,如果您的意思是其他的,比如您可能正在考虑在中继器的上下文中使用它,可能会扩展您所说的内容?)注意:第四个参数(true)表示这将替换以前的值(如果有)。此方法是处理
字段中的子字段的好方法,因为您应该将父字段名与子字段名连接起来以更新它们(例如:
update\u字段('parentfldname\u childfldname',$value,$post\u id);
)。我建议使用
update\u post\u meta()
而不是
add\u post\u meta()
,以获得更大的灵活性。