I’m using the following template code to display attachment links:
$args = array(
'post_type' => 'attachment',
'numberposts' => -1,
'post_status' => null,
'post_parent' => $main_post_id
);
$attachments = get_posts($args);
foreach ($attachments as $attachment)
{
the_attachment_link($attachment->ID, false);
}
but after the link I need to display the file’s size. How can I do this?
I’m guessing I could determine the file’s path (via wp_upload_dir() and a substr() of wp_get_attachment_url()) and call filesize() but that seems messy, and I’m just wondering if there’s a method built into WordPress.
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
As far as I know, WordPress has nothing built in for this, I would just do:
filesize( get_attached_file( $attachment->ID ) );
Method 2
I would do :
$attachment_filesize = filesize( get_attached_file( $attachment_id ) );
Or with readable size like 423.82 KB
$attachment_filesize = size_format( filesize( get_attached_file( $attachment_id ) ), 2 );
Refs :
get_attached_file(),
filesize(),
size_format()
Note : Define your $attachment_id
Method 3
I have used this before in functions.php to display the file size in an easily readable format:
function getSize($file){
$bytes = filesize($file);
$s = array('b', 'Kb', 'Mb', 'Gb');
$e = floor(log($bytes)/log(1024));
return sprintf('%.2f '.$s[$e], ($bytes/pow(1024, floor($e))));}
And then in my template:
echo getSize('insert reference to file here');
Method 4
There’s an easier solution, to get human readable file sizes.
$attachment_id = $attachment->ID; $attachment_meta = wp_prepare_attachment_for_js($attachment_id); echo $attachment_meta['filesizeHumanReadable'];
Method 5
To find the size of a file added through the custom fields plugin, I did this:
$fileObject = get_field( 'file '); $fileSize = size_format( filesize( get_attached_file( $fileObject['id'] ) ) );
Just make sure you set the custom field’s “Return Value” to “File Object”.
Method 6
I was looking for the same and found this WordPress built-in solution.
$args = array(
'post_type' => 'attachment',
'numberposts' => -1,
'post_status' => null,
'post_parent' => $main_post_id
);
$attachments = get_posts($args);
foreach ($attachments as $attachment)
{
$attachment_id = $attachment->ID;
$image_metadata = wp_get_attachment_metadata( $attachment_id );
the_attachment_link($attachment->ID, false);
echo the_attachment_link['width'];
echo the_attachment_link['height'];
}
See more at wp_get_attachment_metadata()
Method 7
For audio at least, the file size is saved as “metadata”.
$metadata = wp_get_attachment_metadata( $attachment_id ); echo $metadata['filesize'];
This may not be the case for images and video.
Method 8
Get image file size in wordpress:
$query_images_args = array(
'post_type' => 'attachment',
'post_mime_type' => 'image',
'post_status' => 'inherit',
'posts_per_page' => 10,
);
$query_images = new WP_Query($query_images_args);
foreach ($query_images->posts as $image) {
$img_atts = wp_get_attachment_image_src($image->ID, $default);
$img = get_headers($img_atts[0], 1);
$size = $img["Content-Length"]/1024;
echo round($size);
}
Method 9
Simple function to get attachment file size by attachment id, similar to another answer here but with a little error checking. There is also an additional parameter to specify the number of decimal points to return:
function tm_get_attachment_size($attachment_id, $decimals) {
$file = get_attached_file( $attachment_id );
return $file ? size_format( filesize($file), $decimals ) : 0;
}
For example, say I have an attachment ID of 99: tm_get_attachment_size(99, 1) would return ‘1.4 MB’.
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0