Lassen Sie die Nutzer Bilder vom Front-End zum Post hochladen

Ich möchte angemeldeten Benutzern (WordPress) ermöglichen, Posts vom Frontend (zusammen mit anderen Daten) zu senden.

Mein Formular funktioniert großartig. Ich füge benutzerdefinierte Post-Metadaten hinzu, die ich später auf der benutzerdefinierten Post-Seite anzeigen kann.

Ich habe enctype="multipart/form-data" hinzugefügt, um das Tag zu bilden.

Dieser Code wurde zu functions.php hinzugefügt:

 function insert_attachment($file_handler,$post_id,$setthumb='false') { // check to make sure its a successful upload if ($_FILES[$file_handler]['error'] !== UPLOAD_ERR_OK) __return_false(); require_once(ABSPATH . "wp-admin" . '/includes/image.php'); require_once(ABSPATH . "wp-admin" . '/includes/file.php'); require_once(ABSPATH . "wp-admin" . '/includes/media.php'); $attach_id = media_handle_upload( $file_handler, $post_id ); if ($setthumb) update_post_meta($post_id,'_thumbnail_id',$attach_id); return $attach_id; } 

Und das auf der benutzerdefinierten Post-Seite (wo die Front-End-Form ist):

 if ($_FILES) { foreach ($_FILES as $file => $array) { $newupload = insert_attachment($file,$pid); } }; 

Nach diesem PHP-Code habe ich diesen Code um Post zu erstellen:

 $post_information = array( 'post_title' => wp_strip_all_tags( $_POST['title']), 'post_content' => $_POST['content'], 'post_category' => array($_POST['category']), 'post_type' => 'post', 'post_status' => 'pending' ); $post_information = wp_insert_post($post_information); add_post_meta($post_information, 'custom1', $_POST['custom1']); add_post_meta($post_information, 'custom2', $_POST['custom2']); add_post_meta($post_information, 'custom3', $_POST['custom3']); 

Jetzt werden die Postdaten dem neuen Post ohne Probleme hinzugefügt und das Bild wird hochgeladen. Ich lade Bild mit diesem hoch:

    

Jetzt muss ich eine Möglichkeit finden, das Bild auf dem erstellten benutzerdefinierten Post zu speichern und anzuzeigen. Ich habe über diese zwei Optionen nachgedacht:

  1. Speichern Sie die hochgeladene Bild-URL in einem benutzerdefinierten Feld.
  2. Bild direkt in den Post speichern

Für meinen Fall wäre die erste Option besser, aber ich weiß nicht, wie ich das machen soll.

Gibt es eine Möglichkeit, so zu speichern:

 add_post_meta($post_information, 'imageURL', $_POST['imageURL']); 

Aber ich weiß nicht, wie ich die Image-URL-Variable an ‘imageURL’ übergeben soll.

Gibt es eine Option, das zu tun?

Solutions Collecting From Web of "Lassen Sie die Nutzer Bilder vom Front-End zum Post hochladen"

wp_insert_attachment gibt die resultierende post_ID des Anhangs-Datensatzes zurück, der in der posts-Tabelle erstellt wurde. post_ID müssen Sie diese IDs (mehrere) in der post-Meta-Tabelle mit update_post_meta wie im folgenden Code vorgeschlagen:

 $attchmentIds = array(); if ($_FILES) { foreach ($_FILES as $file => $array) { $newupload = insert_attachment($file,$pid); $attchmentIds[] = $newupload; } }; /*The following code will go after wp_insert_post call*/ update_post_meta($post_information, '_post_custom_attachments', $attchmentIds); 

Sobald dies geschehen ist und Sie die Bilder auf den einzelnen Posts anzeigen möchten, müssen Sie diese Anhangs-IDs aus dem Post-Meta-Feld wp_get_attachment_url und die function wp_get_attachment_url verwenden:

 /*The_Loop*/ $attachmentIds = get_post_meta(get_the_ID(), '_post_custom_attachments'); foreach($attachmentIds as $attachmentId) { echo wp_get_attachment_url( $attachmentId ); //outputs something like http://example.net/wp-content/uploads/filename } 

Referenzlinks:

http://codex.wordpress.org/Function_Reference/wp_insert_attachment http://codex.wordpress.org/Function_Reference/wp_get_attachment_url