Mam formularz, który ma pole upload ($_FILES['watch_photo']
).jak przesłać obraz na ACF z update_field na wordpress
Rozejrzałem się i przyłączyłem tę funkcję.
Zasadniczo pobiera wszystkie istotne informacje, aby można je było ponownie wykorzystać w przyszłości. Zwróci tablicę z $ pid i adresem URL pliku, gdy zostanie ukończone.
Problemem jest to, że ACF nie dostarczył wiele informacji, jak dodać zdjęcia do jego pola przy użyciu 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']);
}
}
}
a potem używany następujący kod:
- utworzenia stanowiska i następnie
- przesłać następnie użyć
my_update_attachment
do przetworzenia obrazu - i na koniec zaktualizować dvanced pole niestandardowe
Kod:
$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);
Czego mi brakuje? jakakolwiek pomoc byłaby bardzo doceniana.
Jak używać update_field() udział? czy to było w funkcji? –