The attachment_icon WordPress PHP filter allows you to customize the icon displayed for attachments in the media library and posts.
Usage
add_filter('attachment_icon', 'your_custom_function', 10, 3); function your_custom_function($icon, $post_id, $size) { // your custom code here return $icon; }
Parameters
$icon
(string): The URL of the default icon for the attachment.$post_id
(int): The ID of the attachment.$size
(string|array): The size of the icon. Can be a named size (e.g. ‘thumbnail’) or an array of width and height values.
More information
See WordPress Developer Resources: attachment_icon
Examples
Change the default icon for PDF attachments
This code replaces the default icon for PDF attachments with a custom icon.
add_filter('attachment_icon', 'custom_pdf_icon', 10, 3); function custom_pdf_icon($icon, $post_id, $size) { $mime_type = get_post_mime_type($post_id); if ($mime_type == 'application/pdf') { $icon = 'https://yourdomain.com/wp-content/uploads/custom-pdf-icon.png'; } return $icon; }
Change the default icon for all audio files
This code replaces the default icon for all audio files with a custom icon.
add_filter('attachment_icon', 'custom_audio_icon', 10, 3); function custom_audio_icon($icon, $post_id, $size) { $mime_type = get_post_mime_type($post_id); if (wp_attachment_is('audio', $post_id)) { $icon = 'https://yourdomain.com/wp-content/uploads/custom-audio-icon.png'; } return $icon; }
Use FontAwesome icons for specific file types
This code uses FontAwesome icons for specific file types instead of the default icons.
add_filter('attachment_icon', 'fontawesome_attachment_icons', 10, 3); function fontawesome_attachment_icons($icon, $post_id, $size) { $mime_type = get_post_mime_type($post_id); switch ($mime_type) { case 'application/pdf': $icon = '<i class="fas fa-file-pdf"></i>'; break; case 'application/zip': $icon = '<i class="fas fa-file-archive"></i>'; break; } return $icon; }
Change the default icon based on attachment size
This code replaces the default icon for large attachments with a custom icon.
add_filter('attachment_icon', 'custom_large_attachment_icon', 10, 3); function custom_large_attachment_icon($icon, $post_id, $size) { $file_size = filesize(get_attached_file($post_id)); if ($file_size > 1048576) { // 1 MB $icon = 'https://yourdomain.com/wp-content/uploads/custom-large-icon.png'; } return $icon; }
Change the default icon for specific user roles
This code replaces the default icon for attachments uploaded by users with the ‘editor’ role with a custom icon.
add_filter('attachment_icon', 'custom_editor_attachment_icon', 10, 3); function custom_editor_attachment_icon($icon, $post_id, $size) { $author_id = get_post_field('post_author', $post_id); $user = get_userdata($author_id); if (in_array('editor', $user->roles)) { $icon = 'https://yourdomain.com/wp-content/uploads/custom-editor-icon.png'; } return $icon; }