Làm cách nào để có được kích thước của tệp đính kèm?


35

Tôi đang sử dụng mã mẫu sau để hiển thị các liên kết đính kèm:

$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);
}

nhưng sau liên kết tôi cần hiển thị kích thước của tập tin. Tôi có thể làm cái này như thế nào?

Tôi đoán tôi có thể xác định con đường của tập tin (thông qua wp_upload_dir()và một substr()số wp_get_attachment_url()) và gọi filesize()nhưng điều đó dường như lộn xộn, và tôi chỉ tự hỏi nếu có một phương pháp xây dựng vào WordPress.


Thật thú vị, không có chức năng nào trong phần phụ trợ để hiển thị kích thước của một tập tin chi tiết cũng như trong danh sách. Vé số 8739
hakre

Câu trả lời:


43

Theo như tôi biết, WordPress không có gì được xây dựng cho việc này, tôi sẽ chỉ làm:

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


Ah - điều đó có vẻ tốt hơn nhiều so với việc gây rối với wp_upload_dir()vv!
Bobby Jack

tôi chỉ cần lấy một kích cỡ tập tin đính kèm bài viết. tôi đã sử dụng get_the_ID () trong post_parent. nhưng không sử dụng.
KarSho

10

Tôi đã sử dụng điều này trước đây trong Hàm.php để hiển thị kích thước tệp ở định dạng dễ đọc:

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))));}

Và sau đó trong mẫu của tôi:

echo getSize('insert reference to file here');

8
Không cần phải tạo một chức năng mới. WP có hai trong số chúng được xây dựng thành cốt lõi. size_format()wp_convert_bytes_to_hr()
Brady

8
Có vẻ như wp_convert_bytes_to_hr () hiện không được hỗ trợ cho size_format ()
davemac

5

Tôi sẽ làm :

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

Hoặc với kích thước có thể đọc được như 423.82 KB

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

Tham chiếu : get_attached_file () , filesize () , size_format ()

Lưu ý: Xác định$attachment_id


3

Để tìm kích thước của tệp được thêm thông qua plugin trường tùy chỉnh, tôi đã làm điều này:

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

Chỉ cần đảm bảo rằng bạn đặt "Giá trị trả về" của trường tùy chỉnh thành "Đối tượng tệp".


3

Có một giải pháp dễ dàng hơn, để có được kích thước tệp có thể đọc được của con người.

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

echo $attachment_meta['filesizeHumanReadable'];

có một wk_ funktion cho mọi thứ ;-)
Thomas Fellinger

Câu trả lời nên được chấp nhận
user1676224

1

Tôi đã tìm kiếm tương tự và tìm thấy giải pháp tích hợp WordPress này.

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

tìm hiểu thêm tại wp_get_attachment_metadata()


2
Câu hỏi là về kích thước của tệp như số byte, không phải như kích thước hình ảnh.
Hết

Doh, tôi nhớ đọc nó. :-)
Vayu

1

Đối với âm thanh ít nhất, kích thước tệp được lưu dưới dạng "siêu dữ liệu".

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

Đây có thể không phải là trường hợp cho hình ảnh và video.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.