Limite o upload de imagens para um e desative os tipos de arquivo de áudio, vídeo e outros documentos para upload

20

Alguém conhece algum truque em Adicionar nova postagem para:

  1. Desative o upload de áudio, vídeo e outros tipos de arquivos.

  2. Aceite apenas o upload de uma imagem (jpg, png, gif).

  3. Limite o upload de cada postagem para apenas uma imagem (não mais que uma).

Desde já, obrigado.

José Pablo Orozco Marín
fonte
11
Você também pode modificar o carregador de Flash para permitir apenas um arquivo . Isso funciona em conjunto com a solução fornecida por Mike.
Jan Fabry

Respostas:

25

Eu estava prestes a desistir de pensar que não era possível ou pelo menos fácil, e então tropecei no wp_handle_upload_prefilterfiltro, o que dá exatamente o que você pediu! Aqui está o código:

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

E aqui estão algumas capturas de tela mostrando como fica em ação:

Captura de tela do WordPress Upload Dialog com código para desativar vários uploads de qualquer coisa além de arquivos de imagem

Captura de tela do diálogo de upload do WordPress com código para desativar vários uploads de imagens por postagem

MikeSchinkel
fonte
Obrigado Mike. Parece funcionar no processo de upload não flash, mas o uso da versão flash mostra: ... Desculpe, você só pode enviar um arquivo de imagem .GIF, .JPG ou .PNG.
José Pablo Orozco Marín 30/01
@ José Pablo Orozco Marín - Obrigado por encontrar o meu erro. Acho que encontrei o problema e postei uma versão mais recente do código que acredito que funcione agora para o Flash Uploader. Avise-se me!
MikeSchinkel
@ José Pablo Orozco Marín - Impressionante. Ainda bem que pude ajudar.
51111 MikeSchinkel
onde devo adicionar esta linha - e é compatível com tu wp 3.01 e posterior?
11
ei mike. Esta resposta é bastante antiga. Existe uma abordagem melhor considerando a nova versão do wordpress?
Sisir