Je rencontre un petit problème d'uploads d'image dans Wordpress.
Je suis en train de créer un formulaire pour insérer une machine sur un site et je n'arrive pas à enregistrer les images téléchargées à partir de l'input files (multiples).
Tout ce passe bien quand je mets le code pour uploader une image, mais lorsque je mets en place une boucle, les images ne sont pas "lues" ni enregistrées.
Je vous remercie d'avance pour votre aide précieuse.
Voici le code simplifié( juste pour la partie du formulaire concernant les images:
Formulaire:
Code : Tout sélectionner
<form method="post" action="" enctype="multipart/form-data">
<div class="mm-image-container py-5 my-5">
<div id="image-container"></div>
<input type="file" name="images" id="image-input" multiple="multiple" onchange="previewImages(this)" accept="image/*">
</div>
<script>
function previewImages(input) {
var imageContainer = document.getElementById('image-container');
var files = input.files;
for (var i = 0; i < files.length; i++) {
var file = files[i];
var reader = new FileReader();
reader.onload = (function (file) {
return function (e) {
var previewContainer = document.createElement('div');
previewContainer.className = 'preview-container';
var previewImage = document.createElement('img');
previewImage.className = 'preview-image';
previewImage.src = e.target.result;
var removeButton = document.createElement('button');
removeButton.type = 'button';
removeButton.className = 'remove-button';
removeButton.textContent = 'x';
removeButton.onclick = function () {
removeImage(previewContainer);
};
previewContainer.appendChild(previewImage);
previewContainer.appendChild(removeButton);
imageContainer.appendChild(previewContainer);
};
})(file);
reader.readAsDataURL(file);
}
}
function removeImage(container) {
container.parentNode.removeChild(container);
}
</script></form>Code : Tout sélectionner
if(isset($_FILES['images'])) {
$images = $_FILES['images'];
foreach($images['name'] as $key => $filename) {
$filetype = $images['type'][$key];
$filetmp = $images['tmp_name'][$key];
$filesize = $images['size'][$key];
$infos_image = @getImageSize($filetmp);
$now = time();
$date = date('Y-m-d H:i:s', $now);
$attachment_date = date('Y/m', $now);
$attachment_date_imp = $attachment_date . '/' . $filename;
// WordPress uploads files
$upload_dir = wp_upload_dir();
$upload_dir_url = $upload_dir['url'];
$destination = $upload_dir['path'] . '/' . $filename;
$images_arg = array(
'post_author' => get_current_user(),
'post_date' => $date,
'post_content' => '',
'post_title' => pathinfo($filename, PATHINFO_FILENAME),
'post_status' => 'inherit',
'post_name' => pathinfo($filename, PATHINFO_FILENAME),
'post_parent' => $post_id,
'guid' => $upload_dir_url .'/' . $filename,
'post_type' => 'attachment',
'post_mime_type' => $filetype,
);
$image_id = wp_insert_post($images_arg);
$images_meta_arg = array(
'width' => $infos_image[0],
'height' => $infos_image[1],
'file' => $attachment_date_imp,
'filesize' => $filesize,
'sizes' => array(
'medium' => array(
'file' => pathinfo($filename, PATHINFO_FILENAME) .'-235x300.' . pathinfo($filename, PATHINFO_EXTENSION),
'width' => 235,
'height' => 300,
'mime-type' => $filetype,
'filesize' => 17700
),
// Add other sizes as needed
),
'image_meta' => array(
// Add image meta data as needed
)
);
add_post_meta($image_id, '_wp_attached_file', $attachment_date_imp);
add_post_meta($image_id, '_wp_attachment_metadata', $images_meta_arg);
move_uploaded_file($filetmp, $destination);
$image_path = $destination;
$image = wp_get_image_editor($image_path);
if (!is_wp_error($image)) {
// Resize and save different image sizes here
$sizes = array(
array(235, 300),
array(100,100),
array(300,300),
array(344,300),
array(344,400),
array(173,223),
array(150,150),
// Add other sizes as needed
);
foreach ($sizes as $size) {
$image->resize($size[0], $size[1], true);
$upload_path = $upload_dir['path'] . '/';
$filename = basename($image_path);
$new_image_path = $upload_path . pathinfo($filename, PATHINFO_FILENAME) . '-' . $size[0] . 'x' . $size[1] . '.' . pathinfo($filename, PATHINFO_EXTENSION);
$saved = $image->save($new_image_path);
}
}
}
}