upload_mimesfilter-hookWP 2.0.0

Allows adding/removing file types that can be uploaded to the site (file MIME types allowed for upload).

File MIME types

When uploading .rar, .swf, and other files, the following message is displayed:

"Sorry, you are not allowed to upload this file type."

To avoid this warning, add the MIME type of the uploaded file to the allowlist.

List of predefined MIME types

See: wp_get_mime_types()

[jpg|jpeg|jpe]        =>  image/jpeg
[gif]                 =>  image/gif
[png]                 =>  image/png
[bmp]                 =>  image/bmp
[tiff|tif]            =>  image/tiff
[webp]                =>  image/webp
[avif]                =>  image/avif
[ico]                 =>  image/x-icon
[heic]                =>  image/heic
[heif]                =>  image/heif
[heics]               =>  image/heic-sequence
[heifs]               =>  image/heif-sequence
[asf|asx]             =>  video/x-ms-asf
[wmv]                 =>  video/x-ms-wmv
[wmx]                 =>  video/x-ms-wmx
[wm]                  =>  video/x-ms-wm
[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
[webm]                =>  video/webm
[mkv]                 =>  video/x-matroska
[3gp|3gpp]            =>  video/3gpp
[3g2|3gp2]            =>  video/3gpp2
[txt|asc|c|cc|h|srt]  =>  text/plain
[csv]                 =>  text/csv
[tsv]                 =>  text/tab-separated-values
[ics]                 =>  text/calendar
[rtx]                 =>  text/richtext
[css]                 =>  text/css
[htm|html]            =>  text/html
[vtt]                 =>  text/vtt
[dfxp]                =>  application/ttaf+xml
[mp3|m4a|m4b]         =>  audio/mpeg
[aac]                 =>  audio/aac
[ra|ram]              =>  audio/x-realaudio
[wav|x-wav]           =>  audio/wav
[ogg|oga]             =>  audio/ogg
[flac]                =>  audio/flac
[mid|midi]            =>  audio/midi
[wma]                 =>  audio/x-ms-wma
[wax]                 =>  audio/x-ms-wax
[mka]                 =>  audio/x-matroska
[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
[psd]                 =>  application/octet-stream
[xcf]                 =>  application/octet-stream
[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
[oxps]                 =>  application/oxps
[xps]                 =>  application/vnd.ms-xpsdocument
[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
[wp|wpd]              =>  application/wordperfect
[key]                 =>  application/vnd.apple.keynote
[numbers]             =>  application/vnd.apple.numbers
[pages]               =>  application/vnd.apple.pages

Usage

add_filter( 'upload_mimes', 'wp_kama_upload_mimes_filter', 10, 2 );

/**
 * Function for `upload_mimes` filter-hook.
 * 
 * @param array            $t    Mime types keyed by the file extension regex corresponding to those
 *                               types.
 * @param int|WP_User|null $user User ID, User object or null if not provided (indicates current
 *                               user).
 *
 * @return array
 */
function wp_kama_upload_mimes_filter( $t, $user ){
	// filter...
	return $t;
}
$t(array)

MIME-type data as an array. See the value returned by wp_get_mime_types().

The array contains elements whose keys are regular expressions for MIME types, such as 'jpg|jpeg|jpe', and whose values are the MIME types themselves, such as 'image/jpeg'.

$user(int/WP_User/null)
User ID or object. If null is specified, the current user is used.

Examples

#1 Allow CSV files to be uploaded

add_filter( 'upload_mimes', 'add_csv_type' );
function add_csv_type( $mime_types ){
	$mime_types['csv'] = 'text/csv';

	return $mime_types;
}

#2 Allow administrators to upload any files without validation

If the ALLOW_UNFILTERED_UPLOADS constant is defined in a plugin or in the wp-config.php file, administrators (users with the unfiltered_upload capability) will be able to upload files of any type:

define( 'ALLOW_UNFILTERED_UPLOADS', true );

Read more here.

Changelog

Since 2.0.0 Introduced.

Where the hook is called

get_allowed_mime_types()
upload_mimes
wp-includes/functions.php 3713
return apply_filters( 'upload_mimes', $t, $user );

Where the hook is used in WordPress

wp-includes/ms-default-filters.php 102
add_filter( 'upload_mimes', 'check_upload_mimes' );
wp-includes/rest-api/endpoints/class-wp-rest-font-faces-controller.php 866
add_filter( 'upload_mimes', array( 'WP_Font_Utils', 'get_allowed_font_mime_types' ) );
wp-includes/rest-api/endpoints/class-wp-rest-font-faces-controller.php 886
remove_filter( 'upload_mimes', array( 'WP_Font_Utils', 'get_allowed_font_mime_types' ) );