Как мне узнать размер файла вложения?
Я использую следующий код шаблона для отображения ссылок на вложения:
$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.
7 answers
Насколько я знаю, в WordPress для этого ничего не встроено, я бы просто сделал:
filesize( get_attached_file( $attachment->ID ) );
Я уже использовал это раньше в 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');
Я бы сделал :
$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
Есть более простое решение - получить файлы удобочитаемых размеров.
$attachment_id = $attachment->ID;
$attachment_meta = wp_prepare_attachment_for_js($attachment_id);
echo $attachment_meta['filesizeHumanReadable'];
Чтобы найти размер файла, добавленного с помощью плагина пользовательских полей, я сделал следующее:
$fileObject = get_field( 'file ');
$fileSize = size_format( filesize( get_attached_file( $fileObject['id'] ) ) );
Просто убедитесь, что вы установили для настраиваемого поля "Возвращаемое значение" значение "Файловый объект".
Я искал то же самое и нашел это встроенное в 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()
По крайней мере, для аудио размер файла сохраняется как "метаданные".
$metadata = wp_get_attachment_metadata( $attachment_id );
echo $metadata['filesize'];
Это может не относиться к изображениям и видео.