Alter Accepted Filetypes in WordPress

Falls man die Fehlermeldung “File type does not meet security guidelines. Try another.” erhält, so muss die Liste der akzeptierten Mime Typen (siehe auch: http://www.iana.org/assignments/media-types/) / Dateitypen erweitert werden.

Der entprechende Code ist in /wp-includes/functions.php zu finden (WordPress Version 3.0.4):


...

function wp_upload_bits( $name, $deprecated, $bits, $time = null ) {
 if ( !empty( $deprecated ) )
  _deprecated_argument( __FUNCTION__, '2.0' );

 if ( empty( $name ) )
  return array( 'error' => __( 'Empty filename' ) );

 $wp_filetype = <strong>wp_check_filetype( $name )</strong>;
 if ( !$wp_filetype['ext'] )
  return array( 'error' => __( 'Invalid file type' ) );
...
function <strong>wp_check_filetype( $filename, $mimes = null )</strong> {
 if ( empty($mimes) )
  $mimes = <strong>get_allowed_mime_types()</strong>;
 $type = false;
 $ext = false;

 foreach ( $mimes as $ext_preg => $mime_match ) {
  $ext_preg = '!\.(' . $ext_preg . ')$!i';
  if ( preg_match( $ext_preg, $filename, $ext_matches ) ) {
   $type = $mime_match;
   $ext = $ext_matches[1];
   break;
  }
 }

 return compact( 'ext', 'type' );
}
...

function <strong>get_allowed_mime_types()</strong> {
 static $mimes = false;

 if ( !$mimes ) {
  // Accepted MIME types are set here as PCRE unless provided.
  $mimes = apply_filters( 'upload_mimes', array(
  'jpg|jpeg|jpe' => 'image/jpeg',
  'gif' => 'image/gif',
  'png' => 'image/png',
  'bmp' => 'image/bmp',
  'tif|tiff' => 'image/tiff',
  'ico' => 'image/x-icon',
  'asf|asx|wax|wmv|wmx' => 'video/asf',
  'avi' => 'video/avi',

...

Die Funktion get_allowed_mime_types() einfach um den benötigten Dateityp / Mime Typ erweitern.
‘Dateierweiterung’ => ‘Mime Typ’

Unter *nix kann der Mime Typ mittels “file -i Dateiname” angezeigt werden. Ein Tool für Windows ist mir derzeit nicht bekannt.

Quellen:
http://en.support.wordpress.com/accepted-filetypes/
http://www.snilesh.com/resources/wordpress/wordpress-tips-and-tricks/wordpress-file-type-does-not-meet-security-guidelines-try-another-error/