2013-03-26 9 views
10

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.

+0

Jak używać update_field() udział? czy to było w funkcji? –

Odpowiedz

16

Miałem ten sam problem, prawie masz rację, co również mi pomogło.

spojrzał KDR i update_field przyjmuje mocowania ID W odróżnieniu do konsoli, pid lub url

można zastąpić układ zwrotny:

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

Z poniższej tablicy:

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

, a następnie zmień

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

z następującym

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

Mam również na blogu o tym tutaj http://www.jqui.net/wordpress/acf-upload-image-made-easy/

+0

zapisany mój dzień bruh !! –

-1

Sprawdź tej wtyczki:

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

  1. Utwórz formularz ACF z pola frontendUploader (plugin rozszerzenie)
  2. Dodaj swoją formę ACF do postu i po obsłudze panel administracyjny pole wyboru, aby wyświetlić na przedniej
+0

Twoja wtyczka prawdopodobnie nie działa z ACF V5. Tak naprawdę nie jest to rozwiązanie. –

Powiązane problemy