Tôi có biểu mẫu có trường tải lên ($_FILES['watch_photo']
).cách tải hình ảnh lên ACF bằng update_field trên wordpress
Tôi đã xem xét và kết hợp chức năng này lại với nhau.
Về cơ bản, nó lấy tất cả thông tin liên quan để nó có thể sử dụng lại trong tương lai, nó sẽ trả về một mảng $ pid và URL của tệp, khi nó được thực hiện.
Vấn đề là ACF vẫn chưa cung cấp nhiều thông tin làm thế nào để thêm hình ảnh vào nó các lĩnh vực sử dụng 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']);
}
}
}
và sau đó tôi đã sử dụng đoạn mã sau:
- để tạo ra một bưu chính sau đó
- tải lên sau đó sử dụng
my_update_attachment
để xử lý hình ảnh - và cuối cùng cập nhật dvanced tùy chỉnh lĩnh vực
Mã:
$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);
tôi đang thiếu gì? Mọi sự trợ giúp sẽ rất được trân trọng.
Bạn đã sử dụng phần update_field() như thế nào? là trong một chức năng? –