WordPress Version: 6.5
/**
* Verifies an attachment is of a given type.
*
* @since 4.2.0
*
* @param string $type Attachment type. Accepts `image`, `audio`, `video`, or a file extension.
* @param int|WP_Post $post Optional. Attachment ID or object. Default is global $post.
* @return bool True if an accepted type or a matching file extension, false otherwise.
*/
function wp_attachment_is($type, $post = null)
{
$post = get_post($post);
if (!$post) {
return false;
}
$file = get_attached_file($post->ID);
if (!$file) {
return false;
}
if (str_starts_with($post->post_mime_type, $type . '/')) {
return true;
}
$check = wp_check_filetype($file);
if (empty($check['ext'])) {
return false;
}
$ext = $check['ext'];
if ('import' !== $post->post_mime_type) {
return $type === $ext;
}
switch ($type) {
case 'image':
$image_exts = array('jpg', 'jpeg', 'jpe', 'gif', 'png', 'webp', 'avif');
return in_array($ext, $image_exts, true);
case 'audio':
return in_array($ext, wp_get_audio_extensions(), true);
case 'video':
return in_array($ext, wp_get_video_extensions(), true);
default:
return $type === $ext;
}
}