如何使用 wordpress 上的 update_field 在 ACF 上上传图像

Posted

技术标签:

【中文标题】如何使用 wordpress 上的 update_field 在 ACF 上上传图像【英文标题】:how to upload an image on ACF with update_field on wordpress 【发布时间】:2013-03-16 07:20:42 【问题描述】:

我有一个表单,其中有一个上传 ($_FILES['watch_photo']) 字段。

我环顾四周,来把这个功能放在一起。

它基本上会获取所有相关信息,因此它可以在将来重用,完成后它将返回一个 $pid 数组和文件的 URL。

问题是 ACF 没有提供太多关于如何使用 update_field() http://www.advancedcustomfields.com/resources/functions/update_field/ 将图像添加到其字段的信息

function my_update_attachment($f,$pid,$t='',$c='') 
  wp_update_attachment_metadata( $pid, $f );
  if( !empty( $_FILES[$f]['name'] ))  //New upload
    require_once( ABSPATH . 'wp-admin/includes/file.php' );

    $override['action'] = 'editpost';
    $file = wp_handle_upload( $_FILES[$f], $override );

    if ( isset( $file['error'] )) 
      return new WP_Error( 'upload_error', $file['error'] );
    

    $file_type = wp_check_filetype($_FILES[$f]['name'], array(
      'jpg|jpeg' => 'image/jpeg',
      'gif' => 'image/gif',
      'png' => 'image/png',
    ));
    if ($file_type['type']) 
      $name_parts = pathinfo( $file['file'] );
      $name = $file['filename'];
      $type = $file['type'];
      $title = $t ? $t : $name;
      $content = $c;

      $attachment = array(
        'post_title' => $title,
        'post_type' => 'attachment',
        'post_content' => $content,
        'post_parent' => $pid,
        'post_mime_type' => $type,
        'guid' => $file['url'],
      );

      foreach( get_intermediate_image_sizes() as $s ) 
        $sizes[$s] = array( 'width' => '', 'height' => '', 'crop' => true );
        $sizes[$s]['width'] = get_option( "$s_size_w" ); // For default sizes set in options
        $sizes[$s]['height'] = get_option( "$s_size_h" ); // For default sizes set in options
        $sizes[$s]['crop'] = get_option( "$s_crop" ); // For default sizes set in options
      

      $sizes = apply_filters( 'intermediate_image_sizes_advanced', $sizes );

      foreach( $sizes as $size => $size_data ) 
        $resized = image_make_intermediate_size( $file['file'], $size_data['width'], $size_data['height'], $size_data['crop'] );
        if ( $resized )
          $metadata['sizes'][$size] = $resized;
      

      $attach_id = wp_insert_attachment( $attachment, $file['file'] /*, $pid - for post_thumbnails*/);

      if ( !is_wp_error( $id )) 
        $attach_meta = wp_generate_attachment_metadata( $attach_id, $file['file'] );
        wp_update_attachment_metadata( $attach_id, $attach_meta );
      

      return array(
        'pid' =>$pid,
        'url' =>$file['url']
      );
      // update_post_meta( $pid, 'a_image', $file['url'] );
    
  

然后我使用了以下代码:

创建一个帖子,然后 上传后使用my_update_attachment处理图片 最后更新高级自定义字段

代码:

$args= array(   'post_type' => 'watches',       'post_status' => 'publish'    );

$watch = wp_insert_post($args);
$att = my_update_attachment('watch_image',$watch);
update_field('field_512e085a9372a',$att['url'],$watch);

我错过了什么?任何帮助将不胜感激。

【问题讨论】:

你是如何使用 update_field() 部分的?是在函数中吗? 【参考方案1】:

我遇到了同样的问题,你几乎是对的,这对我也有帮助。

查看了 ACF,update_field 接受附件 ID,而不是 pidurl

可以替换返回数组:

return array(
    'pid' =>$pid,
    'url' =>$file['url']
);

使用以下数组:

return array(
  'pid' =>$pid,
  'url' =>$file['url'],
  'file'=>$file,
  'attach_id'=>$attach_id
);

然后改变

update_field('field_512e085a9372a',$att['url'],$watch);

以下

update_field('field_512e085a9372a',$att['attach_id'],$watch);

【讨论】:

那个博客链接是垃圾邮件,不要点击 @NateBeers 干杯,我已删除链接【参考方案2】:

应该这条线 if ( !is_wp_error( $id )) if ( !is_wp_error( $attach_id ))

【讨论】:

【参考方案3】:

检查这个插件:

https://wordpress.org/plugins/acf-frontend-display/

    使用 frontendUploader 字段创建 ACF 表单(插件扩展) 将您的 ACF 表单添加到帖子中,并使用帖子管理面板使用复选框在前面查看

【讨论】:

您的插件似乎不适用于 ACF V5。所以,这并不是真正的解决方案。

以上是关于如何使用 wordpress 上的 update_field 在 ACF 上上传图像的主要内容,如果未能解决你的问题,请参考以下文章

如何跳过 Wordpress 中相邻帖子上的某些链接?

关闭 WordPress 自动更新

使用 GROUP BY 的 UPDATE 视图上的 SQL 错误

Wordpress:如何删除默认 Wordpress 日历上的存档链接

如何删除 WordPress 网站上的 bitnami 横幅?

sql Wordpress_Update实时站点数据库供本地使用