Как получить размер файла вложения?
Я использую следующий код шаблона для отображения ссылок на вложения:
$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.
Ах - это выглядит намного лучше, чем возиться с wp_upload_dir()
и т.д.!

мне нужно получить размер файла только одного вложения записи. я использовал get_the_ID() в post_parent. но безрезультатно.

Я бы сделал так:
$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

Я использовал этот код в functions.php для отображения размера файла в удобочитаемом формате:
function getSize($file){
$bytes = filesize($file);
$s = array('б', 'Кб', 'Мб', 'Гб');
$e = floor(log($bytes)/log(1024));
return sprintf('%.2f '.$s[$e], ($bytes/pow(1024, floor($e))));}
Затем в моем шаблоне:
echo getSize('укажите ссылку на файл здесь');

Нет необходимости создавать новую функцию. В WordPress уже есть две встроенные функции для этого: size_format()
и wp_convert_bytes_to_hr()

Похоже, что функция wp_convert_bytes_to_hr() теперь объявлена устаревшей в пользу size_format()

Чтобы узнать размер файла, добавленного через плагин произвольных полей, я сделал следующее:
$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()

Получение размера файла изображения в WordPress:
$query_images_args = array(
'post_type' => 'attachment', // Тип записи - вложение
'post_mime_type' => 'image', // Только файлы изображений
'post_status' => 'inherit', // Статус записи - наследуемый
'posts_per_page' => 10, // Количество изображений за запрос
);
$query_images = new WP_Query($query_images_args);
foreach ($query_images->posts as $image) {
$img_atts = wp_get_attachment_image_src($image->ID, $default);
$img = get_headers($img_atts[0], 1);
$size = $img["Content-Length"]/1024; // Получаем размер в КБ
echo round($size); // Выводим округлённое значение
}

Добро пожаловать в wpse! Чем этот подход лучше принятого ответа? Рассмотрите возможность добавить больше объяснений о том, как/почему этот подход лучше или как он решает проблему автора вопроса.

Ваш ответ можно улучшить, добавив дополнительную подтверждающую информацию. Пожалуйста, [отредактируйте], чтобы добавить больше деталей, таких как ссылки или документация, чтобы другие могли подтвердить, что ваш ответ правильный. Вы можете найти больше информации о том, как писать хорошие ответы, в справочном центре.

Простая функция для получения размера файла вложения по его ID, аналогично другому ответу здесь, но с небольшой проверкой на ошибки. Также добавлен дополнительный параметр для указания количества знаков после запятой:
function tm_get_attachment_size($attachment_id, $decimals) {
$file = get_attached_file( $attachment_id );
return $file ? size_format( filesize($file), $decimals ) : 0;
}
Например, если у меня есть вложение с ID 99: tm_get_attachment_size(99, 1)
вернет '1.4 MB'.
