Bagaimana cara saya mendapatkan ukuran file lampiran?

35

Saya menggunakan kode templat berikut untuk menampilkan tautan lampiran:

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

tapi setelah tautan saya perlu menampilkan ukuran file. Bagaimana saya bisa melakukan ini?

Saya menduga saya bisa menentukan path file (melalui wp_upload_dir()dan substr()dari wp_get_attachment_url()) dan panggilan filesize()tetapi yang tampaknya berantakan, dan aku hanya ingin tahu apakah ada metode yang dibangun ke dalam WordPress.

Bobby Jack
sumber
Menariknya, tidak ada fungsi di backend untuk menampilkan ukuran file baik dalam detail maupun dalam daftar. Tiket # 8739
hakre

Jawaban:

43

Sejauh yang saya tahu, WordPress tidak memiliki built-in untuk ini, saya hanya akan melakukan:

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

Joe Hoyle
sumber
Ah - itu terlihat jauh lebih baik daripada bermain-main dengan wp_upload_dir()dll!
Bobby Jack
saya hanya perlu mendapatkan ukuran file satu posting lampiran. saya menggunakan get_the_ID () di post_parent. tapi tidak ada gunanya.
KarSho
10

Saya telah menggunakan ini sebelumnya di functions.php untuk menampilkan ukuran file dalam format yang mudah dibaca:

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

Dan kemudian di templat saya:

echo getSize('insert reference to file here');
davemac
sumber
8
Tidak perlu membuat fungsi baru. WP memiliki dua di antaranya dibangun menjadi inti. size_format()danwp_convert_bytes_to_hr()
Brady
8
Sepertinya wp_convert_bytes_to_hr () sekarang telah ditinggalkan karena size_format ()
davemac
5

Saya akan lakukan:

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

Atau dengan ukuran yang bisa dibaca seperti 423.82 KB

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

Rujukan : get_attached_file () , filesize () , size_format ()

Catatan: Tentukan milik Anda$attachment_id

l2aelba
sumber
3

Untuk menemukan ukuran file yang ditambahkan melalui plugin bidang khusus, saya melakukan ini:

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

Pastikan Anda mengatur "Nilai Pengembalian" bidang khusus ke "File Object".

William Schroeder McKinley
sumber
3

Ada solusi yang lebih mudah, untuk mendapatkan ukuran file yang dapat dibaca manusia.

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

echo $attachment_meta['filesizeHumanReadable'];
Zoltan Kiraly
sumber
ada funktion wp_ untuk semuanya ;-)
Thomas Fellinger
Harus menjadi jawaban yang diterima
user1676224
1

Saya mencari yang sama dan menemukan solusi bawaan WordPress ini.

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

Lihat selengkapnya di wp_get_attachment_metadata()

Vayu
sumber
2
Pertanyaannya adalah tentang ukuran file seperti dalam jumlah byte, bukan dalam dimensi gambar.
Rarst
Doh, aku rindu membacanya. :-)
Vayu
1

Untuk audio setidaknya, ukuran file disimpan sebagai "metadata".

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

Ini mungkin tidak menjadi kasus untuk gambar dan video.

Henryrywright
sumber