I am working on a simple front end image upload in WordPress. With this piece of code I can upload to the wordpress media section but I only upload the name and url of the file then, no image.
Does anyone know what I need to do to upload the image also?
My form:
<form id="dash_action" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<input name="submit" type="submit" class="button" value="<?php _e( 'Save settings' ); ?>" />
</form><!--End dash_action-->
My PHP form handling:
if( isset( $_POST['submit'] ) ) {
$filename = $_FILES['file']['name'];
$wp_filetype = wp_check_filetype( basename($filename), null );
$wp_upload_dir = wp_upload_dir();
$attachment = array(
'guid' => $wp_upload_dir['subdir'] . '/' . basename( $filename ),
'post_mime_type' => $wp_filetype['type'],
'post_title' => preg_replace( '/.[^.]+$/', '', basename( $filename ) ),
'post_content' => '',
'post_status' => 'inherit'
);
$attach_id = wp_insert_attachment( $attachment, $filename, 37 );
require_once( ABSPATH . 'wp-admin/includes/image.php' );
$attach_data = wp_generate_attachment_metadata( $attach_id, $filename );
wp_update_attachment_metadata( $attach_id, $attach_data );
}
After the upload is finished, image file is stored in temporary folder, and will be deleted if you do not copy it somewhere. You can get the file with
That will give you file path, which you can move with
where you need it.
The WordPress codex states that “The file MUST be on the uploads directory”. I’ve added a line to move the uploaded file into the uploads directory and changed the guid path.