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

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

$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()) и call filesize(), но это кажется беспорядочным, и мне просто интересно, есть ли встроенный в WordPress метод.

30 голосов | спросил Bobby Jack 18 PM00000010000000831 2010, 13:11:08

7 ответов


37

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

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

ответил Joe Hoyle 18 PM00000010000000031 2010, 13:17:00
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 19 AM00000070000001831 2010, 07:16:18
3

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

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

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

ответил William Schroeder McKinley 21 PM00000080000005431 2015, 20:33:54
3

Я бы сделал:

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

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

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

Refs: get_attached_file () , filesize () , size_format ()

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

ответил l2aelba 27 MarpmMon, 27 Mar 2017 14:01:25 +03002017-03-27T14:01:25+03:0002 2017, 14:01:25
2

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

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

echo $attachment_meta['filesizeHumanReadable'];
ответил Zoltan Kiraly 17 Jam1000000amTue, 17 Jan 2017 11:39:51 +030017 2017, 11:39:51
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()

ответил Vayu 5 J000000Tuesday11 2011, 18:17:04
1

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

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

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

ответил henrywright 27 Maypm17 2017, 16:47:52

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132