Como definir o tipo de arquivo em wp_handle_upload?

3

Estou usando o wp_handle_upload para permitir que os usuários carreguem .csv arquivos no front end e ele está funcionando bem. Eu queria saber como posso limitar isso para permitir apenas arquivos .csv , uma vez que atualmente aceita uma grande variedade de tipos de arquivos. De acordo com o documento, isso deve ser possível substituindo o $overrides param, mas não tenho certeza do que devo fazer para isso.

Obrigado antecipadamente!

    
por Javier Villanueva 24.12.2011 / 06:46

2 respostas

8

Entendi, olhando para o código-fonte eu descobri isso:

wp_handle_upload($file_input, array('test_form' => false, 'mimes' => array('csv' => 'text/csv')));

Para substituir os tipos mime, apenas passe mimes como uma matriz com a chave sendo a extensão do arquivo e o valor como o tipo mime.

    
por Javier Villanueva 24.12.2011 / 17:01
1

O filtro que você deseja usar é 'upload_mimes' enlace

A função get_allowed_mime_types obtém o array filtrado $ mimes, então se você quiser SOMENTE permitir uploads csv, você pode fazer isso:

add_filter('upload_mimes', 'javiervd_filter_mime_types');
function javiervd_filter_mime_types($mimes)
{
  return array('csv' => 'text/csv');
}

Normalmente, com um filtro, você deseja alterar a entrada e retorná-la, mas como deseja apenas os envios em .csv, é possível simplesmente retornar uma matriz com o único elemento. É importante observar que isso substituirá os tipos de upload permitidos no site.

UPDATE: Ok, aqui está o que você pode fazer. Estou assumindo que o usuário está desconectado e é uma boa maneira de testar se esse é o tipo de upload em que apenas os csvs são permitidos. Se não estiver, você pode sempre modificar sua verificação e garantir que o filtro seja aplicado apenas aos uploads de front-end.

add_filter('wp_handle_upload_prefilter' 'javiervd_maybe_filter_mimes');
function javiervd_maybe_filter_mimes($file)
{
  //if not logged in, limit uploads to csvs
  if(!is_user_logged_in())
  { 
     add_filter('upload_mimes', 'javiervd_filter_mime_types');   
     //add another filter to remove the mime filter so it only applies for the one function call
     add_filter('wp_handle_upload', 'javierd_remove_mime_filter');
  }
}

function javiervd_filter_mime_types($mimes)
{
  return array('csv' => 'text/csv');
}   

function javiervd_remove_mime_filter($upload)
{
  remove_filter('upload_mimes', 'javiervd_filter_mime_types');
  return $upload;
}  
    
por brandwaffle 24.12.2011 / 07:46