WordPress file upload no image

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?

Read More

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

}

Related posts

Leave a Reply

3 comments

  1. 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

    $_FILES['file']['tmp_name'];
    

    That will give you file path, which you can move with

    move_uploaded_file();
    

    where you need it.

  2. 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.

    if( isset( $_POST['submit'] ) ) {
    
        $filename = $_FILES['file']['name'];
        $wp_filetype = wp_check_filetype( basename($filename), null );
        $wp_upload_dir = wp_upload_dir();
    
        // Move the uploaded file into the WordPress uploads directory
        move_uploaded_file( $_FILES['file']['tmp_name'], $wp_upload_dir['path']  . '/' . $filename );
    
        $attachment = array(
            'guid' => $wp_upload_dir['url'] . '/' . basename( $filename ), 
            'post_mime_type' => $wp_filetype['type'],
            'post_title' => preg_replace( '/.[^.]+$/', '', basename( $filename ) ),
            'post_content' => '',
            'post_status' => 'inherit'
        );
    
        $filename = $wp_upload_dir['path']  . '/' . $filename;
    
        $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 );  
    
    }
    
  3. $upload = wp_upload_bits( $_FILES['file']['name'], null, file_get_contents( $_FILES['file']['tmp_name'] ) );
    
    $wp_filetype = wp_check_filetype( basename( $upload['file'] ), null );
    
    $wp_upload_dir = wp_upload_dir();
    
    $attachment = array(
        'guid' => $wp_upload_dir['baseurl'] . _wp_relative_upload_path( $upload['file'] ),
        'post_mime_type' => $wp_filetype['type'],
        'post_title' => preg_replace('/.[^.]+$/', '', basename( $upload['file'] )),
        'post_content'   => '',
        'post_status'    => 'inherit'
        );
    
    $attach_id = wp_insert_attachment( $attachment, $upload['file'],  $post_id);
    
    require_once(ABSPATH . 'wp-admin/includes/image.php');
    
    $attach_data = wp_generate_attachment_metadata( $attach_id, $upload['file'] );
    wp_update_attachment_metadata( $attach_id, $attach_data );
    
    set_post_thumbnail(  $post_id, $attach_id );
    update_post_meta( $post_id, '_thumbnail_id', $attach_id );