Bir ek dosyasının boyutunu nasıl alabilirim?


34

Ek bağlantılarını görüntülemek için aşağıdaki şablon kodunu kullanıyorum:

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

ancak bağlantıdan sonra dosyanın boyutunu görüntülemem gerekiyor. Bunu nasıl yapabilirim?

Sanırım dosyanın yolunu (yoluyla wp_upload_dir()ve a substr()ile wp_get_attachment_url()) belirleyip çağırabilirim filesize()ama bu karışık görünüyor ve WordPress'te yerleşik bir yöntem olup olmadığını merak ediyorum.


İlginç bir şekilde, arka uçta bir dosyanın boyutunu ayrıntılı olarak veya listede gösterecek bir işlev yoktur. Bilet # 8739
hakre

Yanıtlar:


42

Bildiğim kadarıyla, WordPress'in bunun için yerleşik bir şeyi yok.

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


Ah - Bu, wp_upload_dir()vb ile uğraşmaktan çok daha iyi görünüyor !
Bobby Jack

sadece bir yazı ekinin dosya boyutunu almam gerekiyor. Post_parent içinde get_the_ID () kullandım. ama faydası yok.
KarSho

10

Bu dosyayı daha önce kolayca okunabilir bir biçimde görüntülemek için daha önce functions.php dosyasında kullandım:

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

Ve sonra şablonumda:

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

8
Yeni bir fonksiyon oluşturmaya gerek yoktur. WP'nin iki tanesi çekirdekte yerleşiktir. size_format()vewp_convert_bytes_to_hr()
Brady,

8
Görünüşe göre wp_convert_bytes_to_hr () şimdi size_format () lehine kaldırıldı
davemac

5

Yapardım :

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

Veya okunabilir boyutta 423.82 KB

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

Referanslar: get_attached_file () , filesize () , size_format ()

Not: tanımlayın$attachment_id


3

Özel alanlar eklentisi ile eklenen bir dosyanın boyutunu bulmak için şunu yaptım:

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

Özel alanın "Dönüş Değeri" ni "Dosya Nesnesi" olarak ayarladığınızdan emin olun.


3

İnsan tarafından okunabilen dosya boyutları elde etmek için daha kolay bir çözüm var.

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

echo $attachment_meta['filesizeHumanReadable'];

her şey için bir wp_ funktion ;-)
Thomas Fellinger

Kabul edilen cevap olmalıdır
user1676224

1

Aynı şeyi arıyordum ve bu WordPress yerleşik çözümünü buldum.

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

Daha fazlasını görün wp_get_attachment_metadata()


2
Soru, dosyanın boyutunun görüntü boyutlarında değil, bayt sayısındaki gibi.
Rarst,

Doh, bunu okumayı özledim. :-)
Vayu

1

En azından ses için, dosya boyutu "meta veri" olarak kaydedilir.

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

Bu görüntü ve video için geçerli olmayabilir .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.