Ändern Sie die Post-Miniaturansicht mit dem Bearbeitungsformular für den Frontend-Post

Ich versuche, die post-Thumbnail zu ändern, wenn ein Benutzer eine neue Datei auf einem Front-End-Post-Bearbeitungsbildschirm auswählt. Dies ist ähnlich dem Code, den ich verwende, um Daten hochzuladen und die Post-Thumbnail auf einem Frontend zu setzen, um ein neues Post-Formular hinzuzufügen:

 'properties', 'posts_per_page' => '-1' ) ); if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); if( isset($_GET['post']) && $_GET['post'] == $post->ID) { $current_post = $post->ID; $content = get_the_content(); $price = get_post_meta($post->ID, 'shru_price', true); $address = get_post_meta($post->ID, 'shru_address', true); $thumbid = get_post_thumbnail_id( $post->ID ); $thumbnail = wp_get_attachment_image_src( $thumbid, 'single-image' ); } endwhile; endif; wp_reset_query(); global $current_post; $postContentError = ''; if ( isset( $_POST['submitted'] ) && isset( $_POST['post_nonce_field'] ) && wp_verify_nonce( $_POST['post_nonce_field'], 'post_nonce' ) ) { if ( trim( $_POST['postContent'] ) === '' ) { $postContentError = 'Please enter a description of this property.'; $hasError = true; } $post_information = array( 'ID' => $current_post, 'post_content' => $_POST['postContent'], 'post_type' => 'properties', 'post_status' => 'publish' ); $post_id = wp_update_post( $post_information ); function upload_user_file( $file = array() ) { global $post_id; require_once( ABSPATH . 'wp-admin/includes/admin.php' ); $file_return = wp_handle_upload( $file, array('test_form' => false ) ); if( isset($file_return['error']) || isset($file_return['upload_error_handler']) ) { return false; } else { $filename = $file_return['file']; $attachment = array( 'post_mime_type' => $file_return['type'], 'post_title' => preg_replace( '/\.[^.]+$/', '', basename( $filename ) ), 'post_content' => '', 'post_status' => 'inherit', 'guid' => $file_return['url'] ); $attachment_id = wp_insert_attachment($attachment, $file_return['url'], $post_id ); require_once(ABSPATH . 'wp-admin/includes/image.php'); $attachment_data = wp_generate_attachment_metadata( $attachment_id, $filename ); wp_update_attachment_metadata( $attachment_id, $attachment_data ); if( 0  

Der einzige Unterschied ist, dass ich im obigen Code versuche zu verwenden:

 update_post_meta( $post_id, '_thumbnail_id', $attachment_id ); 

Anstatt von:

 set_post_thumbnail( $post_id, $attachment_id ); 

Aus irgendeinem Grund wird die Bilddatei auf dem Post-Bearbeitungsbildschirm nicht einmal hochgeladen. Wenn ich update post meta benutze, wird das alte Thumbnail entfernt, also denke ich, dass es dort funktioniert, aber da die Datei nicht hochgeladen wird, kann sie nicht durch ein neues ersetzt werden. Die Verwirrung besteht darin, dass die Datei mit der function ” upload_user_file auf dem Bildschirm “Neuen Post hinzufügen” upload_user_file , nicht jedoch auf dem Bildschirm “Post bearbeiten”.

Irgendwelche Ideen?

Solutions Collecting From Web of "Ändern Sie die Post-Miniaturansicht mit dem Bearbeitungsformular für den Frontend-Post"

Es ist viel einfacher mit WordPress eingebaute function media_handle_upload

http://codex.wordpress.org/Function_Reference/media_handle_upload

 // These files need to be included as dependencies when on the front end. require_once( ABSPATH . 'wp-admin/includes/image.php' ); require_once( ABSPATH . 'wp-admin/includes/file.php' ); require_once( ABSPATH . 'wp-admin/includes/media.php' ); // Let WordPress handle the upload. // Remember, 'my_image_upload' is the name of our file input in our form above. $attachment_id = media_handle_upload( 'my_image_upload', $_POST['post_id'] ); if ( is_wp_error( $attachment_id ) ) { // There was an error uploading the image. } else { // The image was uploaded successfully! } 

Sie müssen Ihren Namen für die Dateiverwaltung angeben, dann können set_post_thumbnail function set_post_thumbnail aufrufen ODER die post meta ‘_thumbnail_id’ setzen

 set_post_thumbnail( $post_id, $attachment_id ); 

BEARBEITEN:

Aus irgendeinem Grund wird die Bilddatei auf dem Post-Bearbeitungsbildschirm nicht einmal hochgeladen.

Können Sie überprüfen, ob Sie das Attribut enctype = “multipart / form-data” korrekt auf Ihr Formular-Tag gesetzt haben?