wp_mime_type_icon

Definition:
function wp_mime_type_icon( $mime = 0 ) {}

Retrieve the icon for a MIME type.

Parameters

  • string $mime: MIME type

Defined filters

  • icon_dir
    apply_filters( 'icon_dir', ABSPATH . WPINC . '/images/crystal' )
  • icon_dir_uri
    apply_filters( 'icon_dir_uri', includes_url('images/crystal')
  • icon_dirs
    apply_filters( 'icon_dirs', array($icon_dir => $icon_dir_uri)
  • wp_mime_type_icon
    apply_filters( 'wp_mime_type_icon', $icon, $mime, $post_id )

Source code

function wp_mime_type_icon( $mime = 0 ) {

	if ( !is_numeric($mime) )

		$icon = wp_cache_get("mime_type_icon_$mime");

	if ( empty($icon) ) {

		$post_id = 0;

		$post_mimes = array();

		if ( is_numeric($mime) ) {

			$mime = (int) $mime;

			if ( $post =& get_post( $mime ) ) {

				$post_id = (int) $post->ID;

				$ext = preg_replace('/^.+?\.([^.]+)$/', '$1', $post->guid);

				if ( !empty($ext) ) {

					$post_mimes[] = $ext;

					if ( $ext_type = wp_ext2type( $ext ) )

						$post_mimes[] = $ext_type;

				}

				$mime = $post->post_mime_type;

			} else {

				$mime = 0;

			}

		} else {

			$post_mimes[] = $mime;

		}



		$icon_files = wp_cache_get('icon_files');



		if ( !is_array($icon_files) ) {

			$icon_dir = apply_filters( 'icon_dir', ABSPATH . WPINC . '/images/crystal' );

			$icon_dir_uri = apply_filters( 'icon_dir_uri', includes_url('images/crystal') );

			$dirs = apply_filters( 'icon_dirs', array($icon_dir => $icon_dir_uri) );

			$icon_files = array();

			while ( $dirs ) {

				$keys = array_keys( $dirs );

				$dir = array_shift( $keys );

				$uri = array_shift($dirs);

				if ( $dh = opendir($dir) ) {

					while ( false !== $file = readdir($dh) ) {

						$file = basename($file);

						if ( substr($file, 0, 1) == '.' )

							continue;

						if ( !in_array(strtolower(substr($file, -4)), array('.png', '.gif', '.jpg') ) ) {

							if ( is_dir("$dir/$file") )

								$dirs["$dir/$file"] = "$uri/$file";

							continue;

						}

						$icon_files["$dir/$file"] = "$uri/$file";

					}

					closedir($dh);

				}

			}

			wp_cache_set('icon_files', $icon_files, 600);

		}



		// Icon basename - extension = MIME wildcard

		foreach ( $icon_files as $file => $uri )

			$types[ preg_replace('/^([^.]*).*$/', '$1', basename($file)) ] =& $icon_files[$file];



		if ( ! empty($mime) ) {

			$post_mimes[] = substr($mime, 0, strpos($mime, '/'));

			$post_mimes[] = substr($mime, strpos($mime, '/') + 1);

			$post_mimes[] = str_replace('/', '_', $mime);

		}



		$matches = wp_match_mime_types(array_keys($types), $post_mimes);

		$matches['default'] = array('default');



		foreach ( $matches as $match => $wilds ) {

			if ( isset($types[$wilds[0]])) {

				$icon = $types[$wilds[0]];

				if ( !is_numeric($mime) )

					wp_cache_set("mime_type_icon_$mime", $icon);

				break;

			}

		}

	}



	return apply_filters( 'wp_mime_type_icon', $icon, $mime, $post_id ); // Last arg is 0 if function pass mime type.

}

3915

No comments yet... Be the first to leave a reply!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: