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.


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


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

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


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".


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

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()


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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.