Як отримати розмір файлу вкладень?


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

Я раніше це використовував у function.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()
Брейді

8
Виглядає як wp_convert_bytes_to_hr () тепер засуджується на користь size_format ()
davemac


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

Це може не стосуватися зображень та відео.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.