Custom image upload

I’m trying to setup upload for for attachments for my custom post form.

At first I add to my form tag enctype="multipart/form-data"

Read More

For testing purposes I have two upload forms, but in future I’m gonna implement only one form and use jQuery to append as many forms as I want.

    <fieldset class="images">
        <label for="images">Front of the Bottle</label>
        <input type="file" name="image1" id="bottle_front" size="50">
    </fieldset>
    <fieldset class="images">
        <label for="images">Back of the Bottle</label>
        <input type="file" name="image2" id="bottle_rear" size="50">
    </fieldset>

in PHP I use:

    if ($_FILES) {
        foreach ($_FILES as $file => $array) {
            $newupload = insert_attachment($file,$post_id);
            // $newupload returns the attachment id of the file that
            // was just uploaded. Do whatever you want with that now.
        }
    }

and in functions.php I have functions which should handle this form.

function insert_attachment($file_handler,$post_id,$setthumb='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 ($setthumb) update_post_meta($post_id,'_thumbnail_id',$attach_id);
 return $attach_id;
 }

everything works pefect if I just upload two images, but If I want to upload only one OR none, I get error my post_meta db:

O:8:"WP_Error":2:{s:6:"errors";a:1:{s:12:"upload_error";a:1:{i:0;s:21:"No file was uploaded.";}}s:10:"error_data";a:0:{}}

I tried inserting:
if ($_FILES[$file_handler][‘error’] === 4) __return_false();
in functions.php but it does not work, how to tell my script that my form is empty?

Credits: took this form from here

Related posts

Leave a Reply

2 comments

  1. May be you are not returning correctly from function, Try this,

    function insert_attachment($file_handler, $post_id, $setthumb=false) {
        // check to make sure its a successful upload
        // changes start
        if ($_FILES[$file_handler]['error'] !== UPLOAD_ERR_OK) {
            return __return_false();
        }
        // changes end
    
        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 ($setthumb)
            update_post_meta($post_id, '_thumbnail_id', $attach_id);
        return $attach_id;
    }
    
  2. In my point of view, it’s better to simply re-use the existing native function of WordPress featured images
    that let’s you upload images in your custom post type.

    You can enable while registering your custom post adding the option

    'supports' => array('thumbnail')
    

    such as many other usefulle native functions