web-dev-qa-db-fra.com

Limitez le téléchargement d'images à un et désactivez les types de fichiers audio, vidéo et autres documents à télécharger

Ajouter un nouveau message à:

  1. Désactiver le téléchargement de fichiers audio, vidéo et autres.

  2. N'accepter que le téléchargement d'une image (jpg, png, gif).

  3. Limitez le téléchargement de chaque publication à une seule image (pas plus d'une).

Merci d'avance.

20

J'étais sur le point d'abandonner en pensant que ce n'était pas possible ou du moins facile, puis je suis tombé sur le filtre wp_handle_upload_prefilter qui vous donne exactement ce que vous avez demandé! Voici le 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;
}

Et voici quelques captures d'écran montrant à quoi ça ressemble en 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 

25
MikeSchinkel