Simple upload field for WordPress plugins/themes
With this you can upload images through your plugin/theme. They are saved as attachments. Please add nonce fields for security reasons.
<?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 );
}
}
}
}
?>
hello, nice code, but i need to include it into a plugin option page.
What i need to do is upload a custom logo from pc and append preview into same page.
i use your code, but in my plugin doesn't work; no error message, simply do not upload file.
How i can solve this big trouble? thanks
Hi Pigi, if you have problems with your code you should debug it, using some debugger or adding logging output. If you're having problems with a specific line of my code I can probably help you.
hello,
i am also using this code. in my form when i upload pictures it works, but the metadata that is generated is much different from what is generated when i upload the same picture from the media panel in the admin page.
just to give an example, no thumbnail is created. do you know how to make it work?
thanks!
I think you have to use wp_generate_attachment_metadata() to do that, but I haven't tested this.
Nice but Iam a newbie, can you explain how to step by step use this plugin? I have installed on my wordpress
I written the detail and simple code to upload file through add_meta_box function. check the following article.
http://wordpressapi.com/2010/11/22/file-upload-with-add_meta_box-or-custom_post_type-in-wordpress/
Nice, thanks for sharing!
Check sony's link below :-)
Oh, there was an error in the wp_insert_attachment() call, you're supposed to pass the absolute path to the file. It's fixed in the paste now.