admin管理员组文章数量:1279115
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.
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.
- Interestingly, there is no functionality in the backend to display the size of a file wether in details nor in the list. Ticket #8739 – hakre Commented Aug 19, 2010 at 6:44
9 Answers
Reset to default 49As far as I know, WordPress has nothing built in for this, I would just do:
filesize( get_attached_file( $attachment->ID ) );
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
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');
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'];
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".
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()
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.
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);
}
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'.
本文标签: templatesHow do I get the size of an attachment file
版权声明:本文标题:templates - How do I get the size of an attachment file? 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1741250414a2365685.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论