web-dev-qa-db-fra.com

Comment définir le type de fichier dans wp_handle_upload?

J'utilise wp_handle_upload pour permettre aux utilisateurs de télécharger des fichiers .csv dans le système frontal et tout fonctionne correctement. Je me demandais comment puis-je limiter cela à autoriser uniquement les fichiers .csv, car il accepte actuellement une grande variété de types de fichiers. Selon la documentation, cela devrait être possible en remplaçant le paramètre $overrides mais je ne suis pas sûr de ce que je devrais le laisser passer pour le faire.

Merci d'avance!

3
Javier Villanueva

Compris, en regardant le code source, j'ai trouvé ceci:

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

Pour remplacer les types mime, il suffit de passer mimes en tant que tableau avec la clé étant l'extension de fichier et la valeur en tant que type mime.

8
Javier Villanueva

Le filtre que vous souhaitez utiliser est 'upload_mimes' http://xref.yoast.com/trunk/_functions/get_allowed_mime_types.html

La fonction get_allowed_mime_types obtient le tableau filtré $ mimes, donc si vous souhaitez autoriser UNIQUEMENT les envois au format csv, procédez comme suit:

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

Normalement, avec un filtre, vous souhaitez modifier l’entrée et la renvoyer, mais comme vous ne souhaitez que des téléchargements .csv, vous pouvez simplement renvoyer un tableau avec le même élément. Il est important de noter que cela remplacera les types de téléchargement autorisés sur le site.

UPDATE: Ok, voici ce que vous pouvez faire. Je suppose que l'utilisateur est déconnecté, et c'est un bon moyen de vérifier que c'est le type de téléchargement où seuls les fichiers csv sont autorisés. Si ce n'est pas le cas, vous pouvez toujours modifier votre vérification si et vous assurer que le filtre est uniquement appliqué aux téléchargements frontaux.

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