Сейчас пишу проект, стараюсь не использовать сторонние плагины.
Была необходимость реализовать возможность загрузки файлов на сайт.
Оказалось, что в интернете не так уж и много решений, точнее много, но всё не то…
<?php /** * Form builder helper * * @param string $label Field label * @return none */ function fileupload( $label ) { ?> <tr> <td class="left_label"> <?php echo $label; ?> </td> <td> <form name="uploadfile" id="uploadfile_form" method="POST" enctype="multipart/form-data" action="<?php echo $this->filepath.'#uploadfile'; ?>" accept-charset="utf-8" > <input type="file" name="uploadfiles[]" id="uploadfiles" size="35" class="uploadfiles" /> <input class="button-primary" type="submit" name="uploadfile" id="uploadfile_btn" value="Upload" /> </form> </td> </tr> <?php } /** * Handle file uploads * * @todo check nonces * @todo check file size * * @return none */ function fileupload_process() { $uploadfiles = $_FILES['uploadfiles']; if (is_array($uploadfiles)) { foreach ($uploadfiles['name'] as $key => $value) { // look only for uploded files if ($uploadfiles['error'][$key] == 0) { $filetmp = $uploadfiles['tmp_name'][$key]; //clean filename and extract extension $filename = $uploadfiles['name'][$key]; // get file info // @fixme: wp checks the file extension.... $filetype = wp_check_filetype( basename( $filename ), null ); $filetitle = preg_replace('/\.[^.]+$/', '', basename( $filename ) ); $filename = $filetitle . '.' . $filetype['ext']; $upload_dir = wp_upload_dir(); /** * Check if the filename already exist in the directory and rename the * file if necessary */ $i = 0; while ( file_exists( $upload_dir['path'] .'/' . $filename ) ) { $filename = $filetitle . '_' . $i . '.' . $filetype['ext']; $i++; } $filedest = $upload_dir['path'] . '/' . $filename; /** * Check write permissions */ if ( !is_writeable( $upload_dir['path'] ) ) { $this->msg_e('Unable to write to directory %s. Is this directory writable by the server?'); return; } /** * Save temporary file to uploads dir */ if ( !@move_uploaded_file($filetmp, $filedest) ){ $this->msg_e("Error, the file $filetmp could not moved to : $filedest "); continue; } $attachment = array( 'post_mime_type' => $filetype['type'], 'post_title' => $filetitle, 'post_content' => '', 'post_status' => 'inherit' ); $attach_id = wp_insert_attachment( $attachment, $filedest ); require_once( ABSPATH . "wp-admin" . '/includes/image.php' ); $attach_data = wp_generate_attachment_metadata( $attach_id, $filedest ); wp_update_attachment_metadata( $attach_id, $attach_data ); } } } } ?>