Ich benutze WordPress mit Ajax in einem Frontend-Formular und ich würde Unterstützung für die Handhabung und das Hochladen des vorgestellten Bildes benötigen. Mein Problem betrifft speziell das vorgestellte Bild. Mein HTML ist so etwas wie:Wordpress und AJAX - Bild als Feature hochladen
<form id="msform" action="#" method="post" enctype="multipart/form-data">
//inputs of various nature
<input type="file" name="main_image" id="main_image" multiple="false" value="" accept=".png, .jpg, .jpeg, .gif"/>
<input type="submit" class="submit" value="Publish"/>
</form>
ich Daten in eine PHP-Funktion (nach Wordpress-Verfahren) durch diese jquery senden:
function apfaddpost() {
var formData = $('#msform').serialize();
formData.append('main_image', $('#main_image')[0].files[0]); //here should be the problem
jQuery.ajax({
type: 'POST',
url: apfajax.ajaxurl,
data: formData + '&action=apf_addpost', //here I send data to the php function calling the specific action
processData: false,
contentType: false
success: function(data, textStatus, XMLHttpRequest) {
var id = '#apf-response';
jQuery(id).html('');
jQuery(id).append(data);
resetvalues();
},
error: function(MLHttpRequest, textStatus, errorThrown) {
alert(errorThrown);
}
});
}
Meine Funktion PHP ist so etwas wie
function apf_addpost() {
require_once(ABSPATH . "wp-admin" . '/includes/image.php');
require_once(ABSPATH . "wp-admin" . '/includes/file.php');
require_once(ABSPATH . "wp-admin" . '/includes/media.php');
$file_handler = 'main_image';
$attach_id = media_handle_upload($file_handler,$pid);
update_post_meta($pid,'_thumbnail_id',$attach_id);
}
Wichtig zu sagen: alle anderen Daten wie Titel, Beschreibung, Tags sind korrekt serialisiert und gesendet. Das Problem ist für das Bild. Ich habe auch versucht, den $_FILES[]
Handler ohne Erfolg zu verwenden, und ich nehme an, dass mein Ajax-Code dann nicht so groß ist. Kannst du mir helfen? Wenn Sie eine andere Problemumgehung für dieses Problem haben, teilen Sie diese bitte mit! Danke im Voraus.
[gelöst] EDIT
Dank der Antworten unten Ich habe gerade meine Ajax in
geändertfunction apfaddpost() {
var fd = new FormData($('#msform')[0]);
fd.append("main_image", $('#main_image')[0].files[0]);
fd.append("action", 'apf_addpost');
//Append here your necessary data
jQuery.ajax({
type: 'POST',
url: apfajax.ajaxurl,
data: fd,
processData: false,
contentType: false,
success: function(data, textStatus, XMLHttpRequest) {
var id = '#apf-response';
jQuery(id).html('');
jQuery(id).append(data);
resetvalues();
},
error: function(MLHttpRequest, textStatus, errorThrown) {
alert(errorThrown);
}
});
}
ich entdeckt habe, dass FormData()
Dateien serialisiert werden können, was die .serialize()
Methode doesn t. Es ist bekannt, dass es einfach war, weiterzugehen. Danke.
Danke @vrajesh! Du hast mein Problem gelöst. Ich wusste nicht, dass FormData() erlaubt, Dateien zu serialisieren. Ich bin Anfänger in Jquery/Ajax. Danke noch einmal! – XiLab
Sie willkommen :). – vrajesh