ฉันจะรับขนาดของไฟล์แนบได้อย่างไร


34

ฉันใช้รหัสเทมเพลตต่อไปนี้เพื่อแสดงลิงค์แนบ:

$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


ที่น่าสนใจคือไม่มีฟังก์ชั่นในแบ็กเอนด์ที่จะแสดงขนาดของไฟล์ในรายละเอียดหรือในรายการ ตั๋ว # 8739
hakre

คำตอบ:


42

เท่าที่ฉันรู้ WordPress มีอะไรในตัวฉันจะทำ:

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


อ่า - นั่นดูดีกว่าล้อเล่นกับมันwp_upload_dir()เลย!
บ๊อบบี้แจ็ค

ฉันต้องมีขนาดไฟล์ของไฟล์แนบหนึ่งไฟล์ ฉันใช้ get_the_ID () ใน post_parent แต่ไม่มีประโยชน์
KarSho

10

ฉันใช้สิ่งนี้มาก่อนใน functions.php เพื่อแสดงขนาดไฟล์ในรูปแบบที่อ่านง่าย:

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

แล้วในเทมเพลตของฉัน:

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

8
ไม่จำเป็นต้องสร้างฟังก์ชั่นใหม่ WP มีสองสิ่งที่สร้างไว้ในคอร์ size_format()และwp_convert_bytes_to_hr()
เบรดี้

8
ดูเหมือนว่า wp_convert_bytes_to_hr () ตอนนี้เลิกใช้แล้วเพื่อสนับสนุน size_format ()
davemac

5

ฉันจะทำ :

$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 () , ขนาด () , size_format ()

หมายเหตุ:กำหนดของคุณ$attachment_id


3

ในการค้นหาขนาดของไฟล์ที่เพิ่มผ่านปลั๊กอินฟิลด์ที่กำหนดเองฉันได้ทำสิ่งนี้:

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

เพียงตรวจสอบให้แน่ใจว่าคุณได้ตั้งค่า "Return Value" ของฟิลด์ที่กำหนดเองเป็น "File Object"


3

มีวิธีแก้ปัญหาที่ง่ายกว่าเพื่อให้ได้ขนาดไฟล์ที่มนุษย์อ่านได้

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

echo $attachment_meta['filesizeHumanReadable'];

มีฟังก์ชั่น wp_ สำหรับทุกอย่าง ;-)
Thomas Fellinger

ควรเป็นคำตอบที่ยอมรับ
user1676224

1

ฉันกำลังมองหาสิ่งเดียวกันและพบโซลูชัน 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()


2
คำถามเกี่ยวกับขนาดของไฟล์เท่ากับจำนวนไบต์ไม่ใช่ขนาดไฟล์
Rarst

ฉันคิดถึงการอ่าน :-)
Vayu

1

สำหรับเสียงอย่างน้อยขนาดไฟล์จะถูกบันทึกเป็น "ข้อมูลเมตา"

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

นี้อาจจะไม่เป็นกรณีสำหรับภาพและวิดีโอ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.