web-dev-qa-db-de.com

Wie setze ich den Dateityp in wp_handle_upload?

Ich verwende wp_handle_upload, um Benutzern das Hochladen von .csv-Dateien im Front-End zu ermöglichen, und es funktioniert einwandfrei. Ich habe mich gefragt, wie ich dies einschränken kann, um nur .csv-Dateien zuzulassen, da derzeit eine Vielzahl von Dateitypen akzeptiert werden. Laut dem Dokument sollte dies durch Überschreiben des Parameters $overrides möglich sein, aber ich bin mir nicht sicher, wie ich es weitergeben soll.

Danke im Voraus!

3

Ich habe es verstanden und mir den Quellcode angesehen, der mir eingefallen ist:

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

Um die MIME-Typen zu überschreiben, übergeben Sie einfach mimes als Array, wobei der Schlüssel die Dateierweiterung und der Wert der MIME-Typ ist.

8

Der Filter, den Sie verwenden möchten, lautet "upload_mimes" http://xref.yoast.com/trunk/_functions/get_allowed_mime_types.html

Die Funktion get_allowed_mime_types ruft das gefilterte $ mimes-Array ab. Wenn Sie also NUR CSV-Uploads zulassen möchten, können Sie dies tun:

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

Normalerweise möchten Sie mit einem Filter die Eingabe ändern und zurückgeben, aber da Sie nur CSV-Uploads möchten, können Sie einfach ein Array mit dem einen Element zurückgeben. Es ist wichtig zu beachten, dass hierdurch zulässige Upload-Typen auf der Website außer Kraft gesetzt werden.

UPDATE: Ok, hier ist was Sie tun können. Ich gehe davon aus, dass der Benutzer abgemeldet ist, und das ist eine gute Möglichkeit, um zu testen, dass dies die Art des Uploads ist, bei der nur CSVs zulässig sind. Ist dies nicht der Fall, können Sie immer nur Ihre if-Prüfung ändern und sicherstellen, dass der Filter nur auf Front-End-Uploads angewendet wird.

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