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

问题描述 投票:0回答:5

我有一些自定义帖子类型“视频”,并向其中添加了一些自定义 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()
之后。

wordpress advanced-custom-fields
5个回答
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
投票

如果想使用字段名而不是字段键,可以使用 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);

0
投票

您可以将其另存为附件,而不是将文件路径保存到数据库,如果将其另存为附件 ID,则 acf 可以很好地使用。请参阅下面的代码示例:-

    function get_file_upload_attachment_id( $upload_path, $post_id ) {
                require_once( ABSPATH . 'wp-admin/includes/image.php' );
            
                // Upload file and attach to post
                $attachment_id = wp_insert_attachment( array(
                    'post_mime_type' => mime_content_type( $upload_path ),
                    'post_title'     => sanitize_file_name( basename( $upload_path ) ),
                    'post_content'   => '',
                    'post_status'    => 'inherit',
                    'post_author'    => get_current_user_id(),
                    'post_type'      => 'attachment',
                    'post_parent'    => $post_id,
                    'guid'           => $upload_path
                ), $upload_path, $post_id );
            
                // Set uploaded image as featured image (post thumbnail)
                if ( is_wp_error( $attachment_id ) ) {
                    return false;
                }
            
                return $attachment_id;
            }
            $attachment_id = get_file_upload_attachment_id($upload
_path, $post_id) // first parameter is upload path
        
update_field('custom_field_name', $attachment_id, $post_id);

现在您可以看到它在帖子页面中可见。


-1
投票

使用ACF5,你必须使用的不是帖子ID,而是帖子对象,湖:

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

-1
投票

我遇到了同样的问题,我只需在脚本末尾添加

do_action('acf/save_post', $postID);
即可纠正它,仅此而已......

© www.soinside.com 2019 - 2024. All rights reserved.