wie man ein Bild auf ACF mit update_field auf WordPress hochlädt

Lesezeit: 3 Minuten

Benutzeravatar von Lee Proctor
Lee Proctor

Ich habe ein Formular, das einen Upload hat ($_FILES['watch_photo']) aufstellen.

Ich habe mich umgesehen und bin gekommen, um diese Funktion zusammenzustellen.

Es nimmt im Grunde alle relevanten Informationen, damit es in Zukunft wiederverwendbar ist, es gibt ein Array der $pid und der URL der Datei zurück, wenn es fertig ist.

Das Problem ist, dass ACF nicht viele Informationen zum Hinzufügen von Bildern zu seinen Feldern bereitgestellt hat 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'] );
    }
  }
}

und dann habe ich folgenden Code verwendet:

  • um einen Beitrag zu erstellen und dann
  • hochladen und dann verwenden my_update_attachment um das Bild zu verarbeiten
  • und aktualisieren Sie schließlich das erweiterte benutzerdefinierte Feld

Der Code:

$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);

Was vermisse ich? jede mögliche Hilfe würde sehr geschätzt.

  • Wie haben Sie den Teil update_field() verwendet? war das in einer funktion?

    – Andreas Lazarus

    25. März 2015 um 15:57 Uhr

Vals Benutzeravatar
Val

Ich hatte das gleiche Problem, du hast es fast richtig gemacht, was mir auch geholfen hat.

schaute auf ACF und die update_field akzeptiert die Anhangs-ID im Gegensatz zu der, pid oder url

Sie können das Rückgabearray ersetzen:

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

Mit folgendem Array:

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

und dann wechseln

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

mit den folgenden

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

  • Dieser Blog-Link ist Spam, klicken Sie nicht darauf

    – Nate Bier

    30. Oktober 2019 um 18:27 Uhr

  • @NateBeers Cheers, ich habe den Link entfernt

    – Val

    31. Oktober 2019 um 10:25 Uhr

sollte diese Zeile
if ( !is_wp_error( $id )) {

sein
if ( !is_wp_error( $attach_id )) {

Überprüfen Sie dieses Plugin:

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

  1. ACF-Formular mit frontendUploader-Feld erstellen (Plugin-Erweiterung)
  2. Fügen Sie Ihr ACF-Formular in den Beitrag ein und verwenden Sie im Post-Admin-Panel das Kontrollkästchen, um es auf der Vorderseite anzuzeigen

  • Ihr Plugin scheint nicht mit ACF V5 zu funktionieren. Es ist also nicht wirklich eine Lösung.

    – Miguel Tavarès

    26. April 2015 um 16:52 Uhr

1403330cookie-checkwie man ein Bild auf ACF mit update_field auf WordPress hochlädt

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy