如何获取附件文件的大小?


34

我正在使用以下模板代码来显示附件链接:

$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);
}

但是在链接之后,我需要显示文件的大小。我怎样才能做到这一点?

我猜我可以确定文件的路径(通过wp_upload_dir()substr()wp_get_attachment_url())并调用,filesize()但这似乎很杂乱,我只是想知道WordPress中是否内置了一种方法。


有趣的是,后端没有功能显示详细信息或列表中的文件大小。机票#8739
哈克(Hakre)2010年

Answers:


42

据我所知,WordPress没有为此内置任何内容,我会这样做:

filesize( get_attached_file( $attachment->ID ) );


啊-看起来比混蛋wp_upload_dir()等等要好得多!
鲍比·杰克

我只需要获取一个帖子附件的文件大小。我在post_parent中使用了get_the_ID()。但没有用。
KarSho

10

我以前在functions.php中使用过此命令,以易于阅读的格式显示文件大小:

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))));}

然后在我的模板中:

echo getSize('insert reference to file here');

8
无需创建新功能。WP有两个内置的核心。size_format()wp_convert_bytes_to_hr()
Brady

8
看起来wp_convert_bytes_to_hr()现在已不推荐使用而推荐使用 size_format()
davemac


3

为了找到通过自定义字段插件添加的文件的大小,我这样做:

$fileObject = get_field( 'file ');
$fileSize   = size_format( filesize( get_attached_file( $fileObject['id'] ) ) );

只要确保将自定义字段的“返回值”设置为“文件对象”即可。



1

我一直在寻找相同的东西,发现了这个WordPress内置解决方案。

$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'];
}

更多信息请访问 wp_get_attachment_metadata()


2
问题是关于文件大小的字节数,而不是图像尺寸。
罗斯特2011年

h,我很想念。:-)
Vayu

1

至少对于音频而言,文件大小另存为“元数据”。

$metadata = wp_get_attachment_metadata( $attachment_id );
echo $metadata['filesize'];

可能不会对图像和视频的情况。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.