Lade das hochgeladene Bild hoch und hefte es an den neuen Beitrag an

Was mache ich:

Einen Beitrag veröffentlichen, bei dem einige Felder über AJAX geprüft wurden.

Das Problem:

Die Bilder werden nicht gespeichert. Alle anderen Infos sind. Das Bild wird nicht auf den Server hochgeladen.

Was ich versucht habe:

Ich habe versucht, $ _POST zu verwenden, und es funktionierte so, bevor ich Sachen mit AJAX überprüfen musste und .preventDefault () und .submit () verwenden musste. Da ich AJAX benutzen musste, probierte ich eine Menge Sachen aus, einschließlich des fileReader ().

Was wird im Code getan:

Wenn der Benutzer auf “Senden” klickt, bekomme ich die Felder, die über JS überprüft werden müssen, gebe sie mit AJAX an PHP weiter, wenn alles in Ordnung ist, gebe ich sie an das JS zurück und aktiviere das .submit () mit dem Formular ICH WÜRDE.

Der Teil des Codes, der die ‘input = file’ enthält:

   

Der Teil des Codes, der die Schaltfläche “Senden” enthält:

  

Der Teil des Codes, der die Informationen verarbeitet und über AJAX sendet, wobei formData () wie in den Antworten verwendet verwendet wird:

 function adAnuncio(e){ e.preventDefault(); var form = document.getElementById('criar_anuncio'); var formData = new FormData(form); formData.append( 'action', 'publicar_anuncio' ); $.ajax({ type: "POST", url: clocal.ajaxurl, dataType: "html", processData: false, contentType: false, data: formData, }).success(function (data) { $data = $(data); $("#mensagem").html($data); var anchor = $('#mensagem'); $('html,body').animate({scrollTop: anchor.offset().top},'slow'); if ($('.linha-sucesso').length){ $('#criar_anuncio').submit(); } }); } 

Der Teil des Codes, der das erhält, was über AJAX gesendet wurde und das PHP enthält, das den Code zum Erstellen des Posts enthält:

 // if user is logged in add_action('wp_ajax_publicar_anuncio', 'publish_anuncio'); // if user is not logged in add_action('wp_ajax_nopriv_publicar_anuncio', 'publish_anuncio'); function publish_anuncio() { if ( count( $errors->get_error_messages() ) < 1 ) : echo '
'; echo ''; echo 'Seu anúncio foi cadastrado correctamente.'; echo '
'; include 'inc/inserir-anuncios-verificacao.php'; endif; wp_die();

Der Teil, wo die Datei behandelt, gespeichert und an den Beitrag angehängt werden soll:

 $post_type = 'cadastro_anuncios'; //the array of arguements to be inserted with wp_insert_post $postStatus = 'publish'; $new_post = array( 'post_title' => $title, 'post_status' => $postStatus, 'post_type' => $post_type, ); //treating the images // 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' ); $img_id01 = media_handle_upload( $_POST['img_destaque'], $postID ); update_post_meta($postID, 'img_id01', $img_id01); 

Es funktioniert nicht. Selbst wenn ich .submit () entferne, wird kein Fehler auf der Konsole gedruckt oder angezeigt. Wenn ich das .submit () behalte, wird alles außer den Bildern richtig gespeichert.

Solutions Collecting From Web of "Lade das hochgeladene Bild hoch und hefte es an den neuen Beitrag an"

Sie müssen das Javascript FormData Objekt verwenden, um Dateien über Ajax hochzuladen. Ein einfaches Tutorial wird hier bereitgestellt. In PHP wird die Datei über die Globals $_FILES und $_POST .


Zusätzlich zum Tutorial müssen die WordPress spezifischen Daten “action” (und vielleicht “nonce”) zum formData Objekt hinzugefügt werden:

 formData.append('action', 'add_your_action_here'); // if necessary formData.append('nonce', 'add_your_nonce_here');