Télécharger plusieurs fichiers avec media_handle_upload
-
-
Utilisezforeachpourtéléchargerplusieurs,iam surmobilemaintenant afin queje nepuissepaspublier le code completUse foreach to upload multiple , iam on mobile now so icant post the full code
- 0
- 2014-12-25
- Shady M Rasmy
-
J'aiessayé denombreusesbouclesforeachet aucune d'entreellesne fonctionne.I tried many foreach loops and no one of them work.
- 0
- 2014-12-25
- Engr.MTH
-
5 réponses
- votes
-
- 2014-12-25
ici si vous utilisez unmodèlepersonnalisé au-delà de cela au début
<?php if( 'POST' == $_SERVER['REQUEST_METHOD'] ) { if ( $_FILES ) { $files = $_FILES["my_file_upload"]; foreach ($files['name'] as $key => $value) { if ($files['name'][$key]) { $file = array( 'name' => $files['name'][$key], 'type' => $files['type'][$key], 'tmp_name' => $files['tmp_name'][$key], 'error' => $files['error'][$key], 'size' => $files['size'][$key] ); $_FILES = array ("my_file_upload" => $file); foreach ($_FILES as $file => $array) { $newupload = my_handle_attachment($file,$pid); } } } } } ?>
dansfunction.php
function my_handle_attachment($file_handler,$post_id,$set_thu=false) { // check to make sure its a successful upload if ($_FILES[$file_handler]['error'] !== UPLOAD_ERR_OK) __return_false(); require_once(ABSPATH . "wp-admin" . '/includes/image.php'); require_once(ABSPATH . "wp-admin" . '/includes/file.php'); require_once(ABSPATH . "wp-admin" . '/includes/media.php'); $attach_id = media_handle_upload( $file_handler, $post_id ); if ( is_numeric( $attach_id ) ) { update_post_meta( $post_id, '_my_file_upload', $attach_id ); } return $attach_id; }
soure http://www. kvcodes.com/2013/12/create-front-end-multiple-file-upload-wordpress/
here if you use custom template past this in the begining
<?php if( 'POST' == $_SERVER['REQUEST_METHOD'] ) { if ( $_FILES ) { $files = $_FILES["my_file_upload"]; foreach ($files['name'] as $key => $value) { if ($files['name'][$key]) { $file = array( 'name' => $files['name'][$key], 'type' => $files['type'][$key], 'tmp_name' => $files['tmp_name'][$key], 'error' => $files['error'][$key], 'size' => $files['size'][$key] ); $_FILES = array ("my_file_upload" => $file); foreach ($_FILES as $file => $array) { $newupload = my_handle_attachment($file,$pid); } } } } } ?>
in function.php
function my_handle_attachment($file_handler,$post_id,$set_thu=false) { // check to make sure its a successful upload if ($_FILES[$file_handler]['error'] !== UPLOAD_ERR_OK) __return_false(); require_once(ABSPATH . "wp-admin" . '/includes/image.php'); require_once(ABSPATH . "wp-admin" . '/includes/file.php'); require_once(ABSPATH . "wp-admin" . '/includes/media.php'); $attach_id = media_handle_upload( $file_handler, $post_id ); if ( is_numeric( $attach_id ) ) { update_post_meta( $post_id, '_my_file_upload', $attach_id ); } return $attach_id; }
soure http://www.kvcodes.com/2013/12/create-front-end-multiple-file-upload-wordpress/
-
Mercipour votre code,je l'utilisepour unformulaire de soumission demessages.Jeme demandais comment valider lesfichierstéléchargés.il y a unmoyen?Thanks for your code , i'm using it for a form to submit posts. I was wondering how i can validate uploaded files. there's a way ?
- 0
- 2015-11-11
- sb0k
-
Celan'écrase-t-ilpas la variableglobale $ _FILES?Doesn't this overwrite the global $_FILES variable?
- 3
- 2016-03-19
- ReLeaf
-
@ReLeaf Ceci _ devrait_ écraser la variableglobale $ _FILES.`media_handle_upload ()` recherche `$ _FILES [$file_handler]`@ReLeaf This _should_ overwrite the global $_FILES variable. `media_handle_upload()` looks for `$_FILES[$file_handler]`
- 0
- 2018-07-04
- Andy Macaulay-Brook
-
Cetextraitfonctionneparfaitement,SAUF sur Android WebView lorsque vousessayez detéléchargerplusieursfichiers (un seulfichierest ok).This snippet works perfect, EXCEPT on Android WebView when trying to upload multiple files (single file is ok).
- 0
- 2019-02-09
- Rollor
-
- 2016-09-06
Si vous souhaitezimplémenter cela sans utiliser lefichier defonctions,vouspouvez utiliser la version simplifiée quej'aiproposée. Ceciest le codetestéfonctionne à 100%
<form id="file_upload" method="post" action="#" enctype="multipart/form-data"> <input type="file" name="my_file_upload[]" multiple="multiple"> <input name="my_file_upload" type="submit" value="Upload" /> </form>
Placez le code PHP sur lapage où la soumission a lieu. Dansmon cas,sur lamêmepage que l'action duformulaireest définie sur "#"
<?php if ($_SERVER['REQUEST_METHOD'] == 'POST') { require_once( ABSPATH . 'wp-admin/includes/image.php' ); require_once( ABSPATH . 'wp-admin/includes/file.php' ); require_once( ABSPATH . 'wp-admin/includes/media.php' ); $files = $_FILES["my_file_upload"]; foreach ($files['name'] as $key => $value) { if ($files['name'][$key]) { $file = array( 'name' => $files['name'][$key], 'type' => $files['type'][$key], 'tmp_name' => $files['tmp_name'][$key], 'error' => $files['error'][$key], 'size' => $files['size'][$key] ); $_FILES = array("upload_file" => $file); $attachment_id = media_handle_upload("upload_file", 0); if (is_wp_error($attachment_id)) { // There was an error uploading the image. echo "Error adding file"; } else { // The image was uploaded successfully! echo "File added successfully with ID: " . $attachment_id . "<br>"; echo wp_get_attachment_image($attachment_id, array(800, 600)) . "<br>"; //Display the uploaded image with a size you wish. In this case it is 800x600 } } } } ?>
Cetteméthoden'inclura lesfichiers requis qu'une seulefois lorsque la soumission duformulaireestterminée au lieu de lesinclure chaquefois que lafonctionest appelée via laboucleforeach
If you want to implement this without using the functions file, you can use the streamlined version I came up with. This is the tested code works 100%
<form id="file_upload" method="post" action="#" enctype="multipart/form-data"> <input type="file" name="my_file_upload[]" multiple="multiple"> <input name="my_file_upload" type="submit" value="Upload" /> </form>
Place the PHP code on the page where the submit happens. In my case on the same page as the form action is set to "#"
<?php if ($_SERVER['REQUEST_METHOD'] == 'POST') { require_once( ABSPATH . 'wp-admin/includes/image.php' ); require_once( ABSPATH . 'wp-admin/includes/file.php' ); require_once( ABSPATH . 'wp-admin/includes/media.php' ); $files = $_FILES["my_file_upload"]; foreach ($files['name'] as $key => $value) { if ($files['name'][$key]) { $file = array( 'name' => $files['name'][$key], 'type' => $files['type'][$key], 'tmp_name' => $files['tmp_name'][$key], 'error' => $files['error'][$key], 'size' => $files['size'][$key] ); $_FILES = array("upload_file" => $file); $attachment_id = media_handle_upload("upload_file", 0); if (is_wp_error($attachment_id)) { // There was an error uploading the image. echo "Error adding file"; } else { // The image was uploaded successfully! echo "File added successfully with ID: " . $attachment_id . "<br>"; echo wp_get_attachment_image($attachment_id, array(800, 600)) . "<br>"; //Display the uploaded image with a size you wish. In this case it is 800x600 } } } } ?>
This method will include the required files only once when the form submit is done instead of including them each time the function is called through foreach loop
-
EDIT: J'aienlevé le code `$post_thumbnail_id=wp_get_attachment_image_src ($ attachment_id,array (800,600));` carilestinutilepour l'exemple.Mais si vous souhaitez obtenir l'URL de l'image,cela vous aidera :)EDIT: I have taken off the code `$post_thumbnail_id = wp_get_attachment_image_src($attachment_id, array(800, 600));` as it is unnecessary for the example. But if you wish to get the URL of the image, it will help you :)
- 0
- 2016-09-06
- Lucky
-
- 2015-01-12
Merci @ shady-m-rasmy J'ai utilisé le code que vous avezmentionné,et il semble que la deuxièmeboucleforeach (ci-dessous - dans lapartie dumodèlepersonnalisé)n'estpasnécessaire carellen'estexécutée qu'une seulefois.
foreach ($_FILES as $file => $array) { $newupload = my_handle_attachment($file,$pid); }
Donc çane part qu'avec
$newupload = my_handle_attachment( "my_file_upload", $pid);
Thanks @shady-m-rasmy I used the code you mentionned, and it seems that the second foreach loop (below - in the custom template part) is not necessary as it is only executed once.
foreach ($_FILES as $file => $array) { $newupload = my_handle_attachment($file,$pid); }
So it only leaves with
$newupload = my_handle_attachment( "my_file_upload", $pid);
-
- 2019-07-02
Plusieursentréespour lamême cléméta
$values = [ 'red', 'yellow', 'blue', 'pink' ]; foreach( $values as $value ) { // This method uses `add_post_meta()` instead of `update_post_meta()` add_post_meta( $item_id, 'color', $value ); }
Multiple entries for the same meta key
$values = [ 'red', 'yellow', 'blue', 'pink' ]; foreach( $values as $value ) { // This method uses `add_post_meta()` instead of `update_post_meta()` add_post_meta( $item_id, 'color', $value ); }
-
Pouvez-vous s'il vousplaîtformater votre codeet ajouter également desexplications?Can you please format your code and add also add explanation?
- 0
- 2019-07-02
- Nilambar Sharma
-
Jene suispas sûr que cela résout leproblèmeici: lapartie laplus difficile semble être d'analyser lesfichiers soumis,et non dejoindreplusieursfichiers à lapublication.I'm not sure this solves the problem here: the hardest part seems to be parsing the submitted files, not attaching multiple files to the post.
- 0
- 2019-07-02
- Rup
-
- 2020-01-07
HTML
<input type="file" id="id_termine_attachment" multiple="multiple" name="id_termine_attachment[]" value="" size="25" />
PHP
function upload_file($_FILES) { if (!empty($_FILES['id_termine_attachment'])) { $supported_types = array( 'application/pdf', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/msword', 'image/gif', 'image/jpeg', 'image/png', 'application/zip' ); $file_arr = reArrayFiles($_FILES['id_termine_attachment']); $file_urls = []; foreach ($file_arr as $file) { $arr_file_type = wp_check_filetype(basename($file['name'])); $uploaded_type = $arr_file_type['type']; if (in_array($uploaded_type, $supported_types)) { $upload = wp_upload_bits($file['name'], null, file_get_contents($file['tmp_name'])); if (isset($upload['error']) && $upload['error'] != 0) { wp_die('There was an error uploading your file. The error is: ' . $upload['error']); } else { array_push($file_urls, $upload['url']); } // end if/else } else { wp_die("This filetyp is not available!"); } } update_post_meta($post_id, 'id_termine_attachment', $file_urls); } } function reArrayFiles(&$file_post) { $file_ary = array(); $file_count = count($file_post['name']); $file_keys = array_keys($file_post); for ($i=0; $i<$file_count; $i++) { foreach ($file_keys as $key) { $file_ary[$i][$key] = $file_post[$key][$i]; } } return $file_ary; }
HTML
<input type="file" id="id_termine_attachment" multiple="multiple" name="id_termine_attachment[]" value="" size="25" />
PHP
function upload_file($_FILES) { if (!empty($_FILES['id_termine_attachment'])) { $supported_types = array( 'application/pdf', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/msword', 'image/gif', 'image/jpeg', 'image/png', 'application/zip' ); $file_arr = reArrayFiles($_FILES['id_termine_attachment']); $file_urls = []; foreach ($file_arr as $file) { $arr_file_type = wp_check_filetype(basename($file['name'])); $uploaded_type = $arr_file_type['type']; if (in_array($uploaded_type, $supported_types)) { $upload = wp_upload_bits($file['name'], null, file_get_contents($file['tmp_name'])); if (isset($upload['error']) && $upload['error'] != 0) { wp_die('There was an error uploading your file. The error is: ' . $upload['error']); } else { array_push($file_urls, $upload['url']); } // end if/else } else { wp_die("This filetyp is not available!"); } } update_post_meta($post_id, 'id_termine_attachment', $file_urls); } } function reArrayFiles(&$file_post) { $file_ary = array(); $file_count = count($file_post['name']); $file_keys = array_keys($file_post); for ($i=0; $i<$file_count; $i++) { foreach ($file_keys as $key) { $file_ary[$i][$key] = $file_post[$key][$i]; } } return $file_ary; }
J'ai unplugin deformulaire WordPresset j'utilise
media_handle_upload
pourtélécharger lesfichierset obteniril y a desidentifiants directementet joint sesidentifiants aumessageen tant queméta date,j'ai utilisé ce qui suitpour lefaire:Le code HTML du champ deformulaireest:
Et le codephp était:
Ettoutfonctionnaitparfaitement.
J'essayemaintenant detéléchargerplusieursfichiers,mon code HTMLest:
Maisje nepeuxpasfairefonctionner lafonction
media_handle_upload
avecplusieursfichierstéléchargés.Toute aide sera appréciée.