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

35

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

$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

Ответы:

43

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

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

Джо Хойл
источник
Ах - это выглядит намного лучше, чем возиться с wp_upload_dir()т. Д.!
Бобби Джек
мне нужно получить размер файла только одного поста вложения. я использовал get_the_ID () в post_parent. но бесполезно.
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');
davemac
источник
8
Нет необходимости создавать новую функцию. В WP есть два из них, встроенных в ядро. size_format()иwp_convert_bytes_to_hr()
Брэди
8
Похоже, wp_convert_bytes_to_hr () теперь устарела в пользу size_format ()
davemac
5

Я бы сделал :

$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 () , filesize () , size_format ()

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

l2aelba
источник
3

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

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

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

Уильям Шредер МакКинли
источник
3

Существует более простое решение, чтобы получить удобочитаемые размеры файлов.

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

echo $attachment_meta['filesizeHumanReadable'];
Золтан Киралы
источник
есть функция wp_ для всего ;-)
Томас Феллингер,
Должен быть принят ответ
user1676224
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
Вопрос в размере файла в байтах, а не в размерах изображения.
Первый
Дох, я скучаю, прочитал это. :-)
Вайю
1

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

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

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

henrywright
источник