[RESOLU] Traitement et enregistrement images multiples depuis input files

Eléphanteau du PHP | 11 Messages

30 avr. 2024, 13:01

Bonjour à tous,

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. :-D

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>
Traitement:

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); } } } }

Eléphanteau du PHP | 11 Messages

30 avr. 2024, 17:09

J'ai trouvé, je mets la réponse:

Il manquais juste les [] pour le name de l'input :)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

01 mai 2024, 00:26

Merci pour le partage de la solution, ça pourra peut être être utile à d'autres :-D
Quand tout le reste a échoué, lisez le mode d'emploi...