WordPress – Erlaubte Upload-Datentypen einstellen

Unser TgZero hat vor einigen Tagen seinen Blogpost über das Anhängen von Daten an ausführe Dateien geschrieben. Den dazugehörigen Quelltext hat er in einem Archiv veröffentlicht. Das ist leider bei der Standardinstallation von WordPress nicht ohne weiteres möglich, denn die Datentypen für den Medienbereich sind beschränkt.

Es bedarf einem kleinen Eingriff in den Quellcode von WordPress, um eigene Dateitypen zu erlauben bzw. für den Upload freizuschalten.

Der Eingriff in den Quellcode

Die Änderungen werden wir in der „functions.php“ des jeweiligen Themes durchführen. Die Datei findet ihr entweder unter „/wp-content/themes/THEMENAME/functions.php“ oder über Design->Editor->Theme-Funktionen(functions.php).

Dort fügen wir zunächst die folgende Zeile hinzu:

add_filter( 'upload_mimes', 'edit_upload_mimes' );

Das wird später die von uns geschriebene „edit_upload_mimes“ Funktion aufrufen, wenn die Funktion „upload_mimes“ aufgerufen wird.

In der angesprochenen Funktion werden wir einfach die gewünschten, fehlenden Dateiendungen bzw. Mime-Types hinzufügen. Hier habe ich die gängigen Archive freigeschaltet:

function edit_upload_mimes($mimes) {
     $mime_types = array( 
        'pdf' => 'application/pdf',
        'tar' => 'application/x-tar',
         'zip' => 'application/zip',
        'gz|gzip' => 'application/x-gzip',
        'rar' => 'application/rar',
        '7z' => 'application/x-7z-compressed'
     );
    return array_merge($mime_types,$mimes);              
}

Wir erstellen ein neues Array, in dem wir unsere gewünschten Dateiendungen festlegen, und führen dieses mit den voreingestellten Dateitypen zusammen. Somit haben wir nun die Kontrolle über die zusätzlichen Dateitypen.

Die Änderungen müssen dann nur noch abgespeichert werden. Man sollte darauf achten, keine „kritischen“ Dateitypen (z.B. html/php/cgi/usw.) zu erlauben, denn ansonsten gefährdet man ggf. seine WordPress-Installation.

Die Auswahl

Die Auswahl an möglichen Dateitypen ist eigentlich unbegrenzt. Eine Übersicht möchte ich dennoch liefern, damit man sich die nötigen Einträge zusammenstellen kann:

    'jpg|jpeg|jpe' => 'image/jpeg',
    'gif' => 'image/gif',
    'png' => 'image/png',
    'bmp' => 'image/bmp',
    'tif|tiff' => 'image/tiff',
    'ico' => 'image/x-icon',
    // Video formats
    'asf|asx|wax|wmv|wmx' => 'video/asf',
    'avi' => 'video/avi',
    'divx' => 'video/divx',
    'flv' => 'video/x-flv',
    'mov|qt' => 'video/quicktime',
    'mpeg|mpg|mpe' => 'video/mpeg',
    'mp4|m4v' => 'video/mp4',
    'ogv' => 'video/ogg',
    'mkv' => 'video/x-matroska',
    // Text formats
    'txt|asc|c|cc|h' => 'text/plain',
    'csv' => 'text/csv',
    'tsv' => 'text/tab-separated-values',
    'ics' => 'text/calendar',
    'rtx' => 'text/richtext',
    'css' => 'text/css',
    'htm|html' => 'text/html',
    // Audio formats
    'mp3|m4a|m4b' => 'audio/mpeg',
    'ra|ram' => 'audio/x-realaudio',
    'wav' => 'audio/wav',
    'ogg|oga' => 'audio/ogg',
    'mid|midi' => 'audio/midi',
    'wma' => 'audio/wma',
    'mka' => 'audio/x-matroska',
    // Misc application formats
    'rtf' => 'application/rtf',
    'js' => 'application/javascript',
    'pdf' => 'application/pdf',
    'swf' => 'application/x-shockwave-flash',
    'class' => 'application/java',
    'tar' => 'application/x-tar',
    'zip' => 'application/zip',
    'gz|gzip' => 'application/x-gzip',
    'rar' => 'application/rar',
    '7z' => 'application/x-7z-compressed',
    'exe' => 'application/x-msdownload',
    // MS Office formats
    'doc' => 'application/msword',
    'pot|pps|ppt' => 'application/vnd.ms-powerpoint',
    'wri' => 'application/vnd.ms-write',
    'xla|xls|xlt|xlw' => 'application/vnd.ms-excel',
    'mdb' => 'application/vnd.ms-access',
    'mpp' => 'application/vnd.ms-project',
    'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
    'docm' => 'application/vnd.ms-word.document.macroEnabled.12',
    'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
    'dotm' => 'application/vnd.ms-word.template.macroEnabled.12',
    'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
    'xlsm' => 'application/vnd.ms-excel.sheet.macroEnabled.12',
    'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroEnabled.12',
    'xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',
    'xltm' => 'application/vnd.ms-excel.template.macroEnabled.12',
    'xlam' => 'application/vnd.ms-excel.addin.macroEnabled.12',
    'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
    'pptm' => 'application/vnd.ms-powerpoint.presentation.macroEnabled.12',
    'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',
    'ppsm' => 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12',
    'potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template',
    'potm' => 'application/vnd.ms-powerpoint.template.macroEnabled.12',
    'ppam' => 'application/vnd.ms-powerpoint.addin.macroEnabled.12',
    'sldx' => 'application/vnd.openxmlformats-officedocument.presentationml.slide',
    'sldm' => 'application/vnd.ms-powerpoint.slide.macroEnabled.12',
    'onetoc|onetoc2|onetmp|onepkg' => 'application/onenote',
    // OpenOffice formats
    'odt' => 'application/vnd.oasis.opendocument.text',
    'odp' => 'application/vnd.oasis.opendocument.presentation',
    'ods' => 'application/vnd.oasis.opendocument.spreadsheet',
    'odg' => 'application/vnd.oasis.opendocument.graphics',
    'odc' => 'application/vnd.oasis.opendocument.chart',
    'odb' => 'application/vnd.oasis.opendocument.database',
    'odf' => 'application/vnd.oasis.opendocument.formula',
    // WordPerfect formats
    'wp|wpd' => 'application/wordperfect',

Fazit

Ich finde es schade, dass WordPress keine Einstellungsmöglichkeit im Backend bietet (oder habe ich die nicht gefunden?), und man diese Einstellungen nur über quasi-direkte Eingriffe in den Quelltext treffen kann.

~ Sebastian