Как мне узнать размер файла вложения?


Я использую следующий код шаблона для отображения ссылок на вложения:

$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.

Author: Krzysiek Dróżdż, 2010-08-18

7 answers

Насколько я знаю, в WordPress для этого ничего не встроено, я бы просто сделал:

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

 44
Author: Joe Hoyle, 2010-08-18 09:17:00

Я уже использовал это раньше в 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');
 10
Author: davemac, 2010-08-19 03:16:18

Я бы сделал :

$attachment_filesize = filesize( get_attached_file( $attachment_id ) );

Или с читаемым размером, таким как 423.82 KB

$attachment_filesize = size_format( filesize( get_attached_file( $attachment_id ) ), 2 );

Ссылки: get_attached_file(), размер файла(), формат_размера()

Примечание: Определите свой $attachment_id

 7
Author: l2aelba, 2017-03-27 11:01:25

Есть более простое решение - получить файлы удобочитаемых размеров.

$attachment_id  = $attachment->ID;
$attachment_meta = wp_prepare_attachment_for_js($attachment_id);

echo $attachment_meta['filesizeHumanReadable'];
 6
Author: Zoltan Kiraly, 2017-01-17 08:39:51

Чтобы найти размер файла, добавленного с помощью плагина пользовательских полей, я сделал следующее:

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

Просто убедитесь, что вы установили для настраиваемого поля "Возвращаемое значение" значение "Файловый объект".

 4
Author: William Schroeder McKinley, 2015-08-21 19:32:43

Я искал то же самое и нашел это встроенное в 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()

 1
Author: Vayu, 2016-08-01 18:37:49

По крайней мере, для аудио размер файла сохраняется как "метаданные".

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

Это может не относиться к изображениям и видео.

 1
Author: henrywright, 2017-05-27 13:47:52