MimeTypes Link Icons


MimeTypes Link Icons is a plugin that looks for links to files and uploads in your blogs posts and adds a nice icon next to it. Optionally add the file’s file size next to the link.

Important note on v3.0 and up: This version partially breaks backwards compatibility: the plugin now requires PHP5.1+ and WP 3.5+. Please have a look at the changelog for more information about the changes.

The icons are configurable. You can choose to display a PNG with transparent background or GIF with white matte, display the icon to the left or the right of the link and choose the icon size.

Each icon is available in the following sizes:

  • 16x16px
  • 24x24px
  • 48x48px
  • 64x64px
  • 128x128px

Supported File Extensions

  • .3g2
  • .3gp
  • .ai
  • .air
  • .asf
  • .avi
  • .bib
  • .capx
  • .cls
  • .csv
  • .deb
  • .djvu
  • .dmg
  • .doc
  • .docx
  • .dwf
  • .dwg
  • .eps
  • .epub
  • .exe
  • .f
  • .f77
  • .f90
  • .flac
  • .flv
  • .gif
  • .gz
  • .ico
  • .indd
  • .iso
  • .jpg
  • .jpeg
  • .key
  • .log
  • .m4a
  • .m4v
  • .midi
  • .mkv
  • .mov
  • .mp3
  • .mp4
  • .mpeg
  • .mpg
  • .msi
  • .msix
  • .odp
  • .ods
  • .odt
  • .oga
  • .ogg
  • .ogv
  • .pages
  • .pdf
  • .png
  • .pps
  • .ppsx
  • .ppt
  • .pptm
  • .pptx
  • .psd
  • .pub
  • .py
  • .qt
  • .ra
  • .ram
  • .rar
  • .rm
  • .rpm
  • .rtf
  • .rv
  • .skp
  • .spx
  • .sql
  • .sty
  • .tar
  • .tex
  • .tgz
  • .tiff
  • .ttf
  • .txt
  • .vob
  • .wav
  • .wmv
  • .xls
  • .xlsx
  • .xml
  • .xpi
  • .zip


  • Dutch – jrf

Please help make this plugin available in more languages by translating it. The translation files are included in the download. See the FAQ for more info.


Since version 3.0, the plugin now requires PHP5.2+ and WP 3.5+.
The PHP filter extension needs to be enabled as well.

Need more ?

If you need support for this plugin or even want a completely different plugin programmed: hire Toby or Juliette!

Error Reporting

The plugin is causing errors/not working the way it should!

First thing to check is whether you are using the latest version, if not, please upgrade and check again.

If you are getting a blank screen when saving the settings, please check that the PHP filter extension is enabled – it is enabled by default in a normal PHP installation, though some disreputable webhosting companies seem to disable it. If that’s the case, contact your webhost to get them to turn it on.

You can check your server php configuration using the code snippet below:

If the error persists, please report any errors you are getting in the WP forum or on GitHub. Error reporting is much appreciated as it will improve the plugin for everyone!

We’ll need at least the following information:

  • the complete error message if there is any
  • a description of the problem
  • the version number of the plugin you are using
  • preferably a link to a page where we can see the error
  • depending on the error: the WP version you are using and the PHP version WP is running on

Sometimes we may need information on the settings you are using. If you have WP_DEBUG set to true, you will see a list of the plugin settings at the bottom of the MimeType Link Icons settings page.

On rare occasions, like with problems with the filesize functions, we may need even more information. We will then ask you to turn on a plugin-specific debugging option.

To do so, please add the following to your (child-)theme’s functions.php file:

$GLOBALS['mimetypes_link_icons']->debug = true;

You may want to wrap this snippet in an if( WP_DEBUG === true ) {} and you can remove it once you’ve send us the output.

Alternatively, you can (temporarily) change the variable in the plugin file, search for the following code snippet and change false to true:

 * @var bool    Debug setting to enable extra debugging for the plugin
var $debug = false;


  • Screenshot of the administration screen
  • Screenshot of the administration screen – advanced settings
  • Screenshot of plugin in action.
  • MimeTypes Link Icons adds icons automatically to your inline attachments.
  • Now you can get MimeTypes Link Icons to add the file size of your attachment, too.


  1. Extract the .zip file and upload its contents to the whole mimetypes_link_icons folder to your /wp-content/plugins/ directory. Alternately, you can install directly from the Plugin directory within your WordPress Install.
  2. Activate the plugin through the “Plugins” menu in WordPress.
  3. By default the PDF icon will be the only one being searched for. It will display the 16×16 png next to your pdf links. You can activate the plugin for other file types via the settings page.


Does `MimeTypes Link Icons` only convert links to uploaded documents ?

No. It searches your post for any links containing the file extensions you have activated. This will be triggered by any link within the normal content area.

I don’t want MimeTypes Link Icons to convert a particular link….

No worries 😉 Just enable the classnames setting on the settings page and add one or more classnames.

The way this works is as follows:
The plugin will look for the classname in your document and will remove the Mimetypes link icons (and file sizes) from all links wrapped within that class.


  • If you want to disable the plugin for a particular link, you may add the class “no_mtli” to the link itself and add “no_mtli” to the list of excluded classes.
  • If you want to disable the plugin for a particular post – for instance post 123 -, you could add the “post-123” class to the list of excluded classes.
  • If you want to disable the plugin for all attachment pages, you could add the “type-attachment” class to the list of excluded classes. Just for the image attachment pages ? add the “image-attachment” class.

Please note: Classnames may differ depending on your theme, so look at the html source of the relevant pages to determine which classname(s) to exclude.

I want to format the file size differently…

You can 😉

First of all, you can change the rounding precision for the file size on the settings screen.

Secondly, there’s an output filter available for your use which will receive the formatted file size string which will look something along the lines of (123.4 kB).

To use the filter add a snippet like the following to your (child-)theme’s functions.php file:

function my_function( $formatted_file_size ) {
    // do your thing
    return $formatted_file_size;
add_filter( 'mtli_filesize', 'my_function' );

Please note: be aware that the file size string will be added to the page via CSS, so the output of your function should be usable in a CSS string!

Is there a way to clear the file size cache ?

Yup! Just uncheck the ‘cache file sizes’ checkbox, save your settings and then check the checkbox again. The file size cache has now been cleared.

I want to have the mimetype icons for a content area which is outside of the loop (a sidebar for instance). Can I?

Yes you can.

If you generate the output yourself in a template file, change:
echo $my_content;
echo mimetypes_to_icons( $my_content );

or even better, if the content you want to change supplies you with an output filter – add the following to your (child-)theme’s functions.php file:
add_filter( ‘name_of_output_filter’, ‘mimetypes_to_icons’, 15 );
for instance:
add_filter( ‘widget_text’, ‘mimetypes_to_icons’, 15 );

Please note: the icons generated for that specific content area, will be generated in non-async mode. All other settings will be respected.

I want to change the classes used by this plugin

You can 😉

There’s an output filter available for the attachment link classes.
Mind: the $classnames_string variables holds all the classes – not just the MTLI classes – which the attachment link, i.e. the <a> tag, has.

To use the filter add a snippet like the following to your (child-)theme’s functions.php file:

function my_classnameFunction( $classnames_string ) {
    // do your thing
    return $classnames_string;
add_filter( 'mtli_classnames', 'my_classnameFunction' );

I want to be able to upload more file types to my WordPress blog!

This is outside of the scope of this plugin, but you should probably read this explanation (includes code sample) on how to add more file types to the WordPress allowed list in an upgrade-friendly manner.

However, if you do add extra file types to your blog and these file types would not (yet) be included in this plugin, you can add the mimetype extensions to the list this plugin uses, by using the filter hook we provided for this purpose.

To use the filter add a snippet like the following to your (child-)theme’s functions.php file:

function change_mimetypes( $current_mimetypes ) {
    // do your thing to the array
    // ie $current_mimetypes[] = 'mp6';
    // or $current_mimetypes = array('mp4','pdf','zzz'); - don't forget to add your own css to your stylesheet in the format .mtli_[extension_without_dots] {background-image:url('/path/to/your/icon')}
    return $current_mimetypes;
add_filter( 'mtli_active_mimetypes', 'change_mimetypes' );

I’m a plugin/theme developer and the MimeTypes Link Icons plugin is conflicting with my plugin…

You can temporarily suspend this plugin by using the pause_mtli() and unpause_mtli() functions.

Add the following code to your plugin where you want to suspend the plugin:

if( function_exists( 'pause_mtli' ) ) {

// Your code

if( function_exists( 'unpause_mtli' ) ) {

Please do advise your users about your use of these functions as we’re not looking to get complaints from users about this plugin not working 😉

How can I translate the plugin?

The plugin is fully translation ready and translations are much appreciated!
Use the /languages/mimetypes-link-icons.pot file which is included in the download to create a new .po file for your language.
To get your translation included in the next release of this plugin:

  • Send us pull request or open an issue on GitHub
  • Open a thread in the WP forum
  • or send the translation to us via email

If you need more information, read this article on how to translate using a .po file.


فبراير 24, 2024
This is an absolut labour saving device and must have. Please update, that this won’t be marked by wordfence and others …
فبراير 11, 2023
It works great! Nice choice of icons, activation for which one we need only in the settings, default is only pdf. It’s just simple and awesome! Works perfectly with Elementor builder, we don’t see the icon in the builder but in front it’s showing up nicely. Thx! Keep up the good work!
مارس 11, 2018 1 reply
Notice: screen_icon is deprecated since version 3.8.0 with no alternative available. in /wp-includes/functions.php on line 3842 Notice: get_screen_icon is deprecated since version 3.8.0 with no alternative available. in wp-includes/functions.php on line 3842
Read all 25 reviews

Contributors & Developers

“MimeTypes Link Icons” is open source software. The following people have contributed to this plugin.


“MimeTypes Link Icons” has been translated into 2 locales. Thank you to the translators for their contributions.

Translate “MimeTypes Link Icons” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.



  • Add .pages extension


  • Add ability to only show file sizes for files over a certain Kb threshold


  • Update to testing version 6.4.3


  • Missing mime icons


  • [New file extension] Added support for additional file extension: .pptm
  • Performance on CSS – only load what we need
  • [Bug fix] plugins that used rel for other uses conflicted with mtli. Swapped for data-mtli


  • [New file extension] Added support for additional file extension: .msix


  • WP compatibility update


  • ¯(°_o)/¯


  • Added support for ACF plugin


  • Added support for PHP7 (thanks to @marol87)
  • Allow for the new wp_installing() function


  • [New file extension] Added support for additional file extension: .key


  • Code enhancements


  • Minor tweak


  • Added the priority of 15 to pause_mtli() and unpause_mtli() functions, to match the initial add_filter setup
  • Renamed folder after typo


  • [Bug fix] Prevent double adding of styles if/when the main function is called several times
  • [Speed] Lower Curl connect time-out, so page loading will be faster if no connection can be made to retrieve the file size of a file.
  • Added note about filter extension requirement to this readme file.
  • Minor code tweaks


  • [Bug fix] filters on plugins_url() could not be applied, fixed
  • [Bug fix] for upgrade routine not running on (re-)activation of the plugin
  • [Bug fix] Small optimization in link matching regex which should prevent an edge case bug. Thanks ts_sklett for reporting.
  • [Bug fix] Fix icon spacing issue as reported by blitz fahrradmanufaktur
  • [New file extensions] Added support for additional file extensions: .cls, .f, .f77, .f90, .py, .rar, .sty

And further:
* Fully leveraged the Options API
* Upped the minimum WP level to fully take advantage of new functions and APIs
* Tested up to WP 3.8-beta
* Code style validated against WordPress standards
* Added API documentation
* One time only force update of internal domains option
* Improved charset support for settings page
* Small improvements in validation
* Removed auto-deactivation if run on old versions (was buggy)
* Various small code tweaks



  • [Bug fix] zip packages for tags weren’t working properly


  • [Bug fix] The new mimetype filter hook was called before the theme (and therefore the functions.php file) was loaded.
  • [Security] Added some extra security measures


  • [New feature] Added extensibility to classnames and file types, meaning that users can add a filter hook to edit/add their own styles
  • [New feature] Added debug mode to async replacement
  • [Bug fix] Async replacement was balking at nodes
  • [Bug fix] Settings links on plugin page didn’t work, thanks sndu for reporting
  • [Bug fix] Error in filesize retrieval if internal domain was not set correctly, thanks PsychicSmurf for reporting
  • [Misc] Added internal debugging variable and some debugging code to help determine problems with filesizes and paths. See the Error reporting section in the readme file for info on how and when to use this.

3.0 by jrf

  • [New file extensions] Added additional file extensions which are within the WP allowed file types list: .jpeg
    .pps, .ppsx, .m4a, .wav, .avi, .3gp, .3g2
  • [New file extensions] Added several additional file extensions based on user requests: .pub, .eps, .rtf and .exe
  • [New file extensions] And some more: .tiff, .ico, .ttf, .qt, .air, .msi, .sql, .flv

  • [New feature] Ability to disable this plugin for more than one classname

  • [New feature] Caching of the results of (slow) file size retrievals. This will make page loading a lot faster for pages with lots of file links. Will automatically be turned on, you can turn it off and/or fine tune the cache duration via the settings page. Default cache duration: 1 week.
  • [New feature] Set the rounding precision (number of digits after the decimal point) for file sizes, small files (b) will always round to 0 decimals.
  • [New feature] Output filter for file size string See the FAQ for more info.
  • [New feature] Ability to have mimetype icons for content outside of the loop See the FAQ for info on how to use this.

  • [Usability] Added ‘check all’/’uncheck all’ togglers for the file types to the settings page

  • [Usability] Compacter options screen – file types now display in two columns
  • [Usability] Added help tab to the settings page
  • [Usability] Added proper settings link on plugins page, credits now link to the GitHub repo
  • [Usability] Added clean uninstall routine

  • [Compatibility] Added pause_mtli() and unpause_mtli() functions for use by other plugins in case of (page specific) conflicts. See the FAQ for info on how to use this.

  • [Bug fix] Images didn’t display if wp-content and/or the plugins directory was in a non-standard location.

  • [Bug fix] Added epub css styling
  • [Bug fix] File size now complies with the localized number format style
  • [Bug fix] Curl settings error when in safe_mode – thanks wolkenkrieger for reporting
  • [Bug fix] If file size is unknown or file size retrieval failed completely, no file size indication will be shown (it used to show ‘unknownb’ or ‘b’)
  • [Bug fix] Links are now matched in a case-insensitive manner, so that both document.DOC as well as document.doc will be matched (was only lowercase)
  • [Bug fix] If a link already had a class attribute, a second one used to be added. Most browsers don’t handle this well. Fixed so that additional class will be added to the existing class attribute.
  • [Bug fix] If file size showing would be on and the link had the disabled classname set, the icon would not show, but the file size still did – thanks Leanne for reporting.
  • [Bug fix] File size showing in async mode would never work
  • [Bug fix] Classes to avoid where not being applied when not in async mode / would force async mode – thanks John Percival for reporting
  • [Bug fix] File size not always showing on attachments.php page – thanks aluizioll for reporting
  • [Bug fix] Padding was too easily overruled by CSS from other plugins – thanks MGmirkin for reporting
  • [Bug fix] File size was retrieved twice for each file… oops.
  • [Bug fix] Hopefully fixed bug in retrieval of file size – thanks brigerard and digitalnordic for reporting
  • [Bug fix] File size retrieval should now also work for (most) relative paths

  • [Localization] Added .pot file to enable translations of this plugin

  • [Code improvements] Complete rewrite in OO style including implementation of the Settings API

  • [Code improvements] Implemented lean loading as much as possible
  • [Code improvements] Greatly improved input validation for the options page

  • [Misc] Added GPL license information