Limit image upload to one and disable audio, video and other document file types to upload

Somebody knows some trick in Add new Post to:

  1. Disable the upload of audio, video and other filetypes.

    Read More
  2. Only accept the upload of an image (jpg, png, gif).

  3. Limit the upload of each Post to only One image (no more than one).

Thanks in advance.

Related posts

Leave a Reply

1 comment

  1. I was about to give up thinking that it wasn’t possible or at least easy and then I stumbled onto the wp_handle_upload_prefilter filter which gives you exactly what you asked for! Here’s the code:

    add_filter('wp_handle_upload_prefilter', 'yoursite_wp_handle_upload_prefilter');
    function yoursite_wp_handle_upload_prefilter($file) {
      // This bit is for the flash uploader
      if ($file['type']=='application/octet-stream' && isset($file['tmp_name'])) {
        $file_size = getimagesize($file['tmp_name']);
        if (isset($file_size['error']) && $file_size['error']!=0) {
          $file['error'] = "Unexpected Error: {$file_size['error']}";
          return $file;
        } else {
          $file['type'] = $file_size['mime'];
        }
      }
      list($category,$type) = explode('/',$file['type']);
      if ('image'!=$category || !in_array($type,array('jpg','jpeg','gif','png'))) {
        $file['error'] = "Sorry, you can only upload a .GIF, a .JPG, or a .PNG image file.";
      } else if ($post_id = (isset($_REQUEST['post_id']) ? $_REQUEST['post_id'] : false)) {
        if (count(get_posts("post_type=attachment&post_parent={$post_id}"))>0)
          $file['error'] = "Sorry, you cannot upload more than one (1) image.";
      }
      return $file;
    }
    

    And here are some screenshots showing how it looks in action:

    Screenshot of WordPress Upload Dialog with code to disable multiple uploads of anything besides image files

    Screenshot of WordPress Upload Dialog with code to disable multiple image uploads per post