Cum obțin dimensiunea unui fișier atașat?
Folosesc următorul cod în șablon pentru a afișa linkurile atașamentelor:
$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);
}
dar după link am nevoie să afișez dimensiunea fișierului. Cum pot face acest lucru?
Presupun că aș putea determina calea fișierului (folosind wp_upload_dir()
și un substr()
din wp_get_attachment_url()
) și să apelez filesize()
, dar pare dezordonat, și mă întreb dacă există o metodă deja implementată în WordPress.

Ah - arată mult mai bine decât să te complici cu wp_upload_dir()
etc.!

am nevoie să obțin doar mărimea fișierului unui singur atașament al postării. am folosit get_the_ID() în post_parent, dar nu funcționează.

Aș face:
$attachment_filesize = filesize( get_attached_file( $attachment_id ) );
Sau cu dimensiune lizibilă precum 423.82 KB
$attachment_filesize = size_format( filesize( get_attached_file( $attachment_id ) ), 2 );
Referințe: get_attached_file(), filesize(), size_format()
Notă: Definește-ți $attachment_id

Am folosit acest cod în functions.php pentru a afișa dimensiunea fișierului într-un format ușor de înțeles:
function getSize($file){
$bytes = filesize($file); // Obține dimensiunea fișierului în bytes
$s = array('b', 'Kb', 'Mb', 'Gb'); // Unități de măsură
$e = floor(log($bytes)/log(1024)); // Calculează exponentul pentru unitatea corectă
return sprintf('%.2f '.$s[$e], ($bytes/pow(1024, floor($e))));} // Formatează rezultatul
Și apoi în template-ul meu:
echo getSize('inserează referința către fișier aici'); // Afișează dimensiunea fișierului

Nu este nevoie să creezi o funcție nouă. WP are două funcții integrate în nucleu. size_format()
și wp_convert_bytes_to_hr()

Se pare că wp_convert_bytes_to_hr() a fost acum depreciat în favoarea funcției size_format()

Pentru a afla dimensiunea unui fișier adăugat prin plugin-ul de câmpuri personalizate, am făcut astfel:
$fileObject = get_field( 'file' );
$fileSize = size_format( filesize( get_attached_file( $fileObject['id'] ) ) );
Asigurați-vă că ați setat "Valoarea returnată" la "Obiect fișier" în setările câmpului personalizat.

Căutam același lucru și am găsit această soluție integrată în 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'];
}
Află mai multe la wp_get_attachment_metadata()

Obține dimensiunea fișierului de imagine în WordPress:
$query_images_args = array(
'post_type' => 'attachment',
'post_mime_type' => 'image',
'post_status' => 'inherit',
'posts_per_page' => 10,
);
$query_images = new WP_Query($query_images_args);
foreach ($query_images->posts as $image) {
$img_atts = wp_get_attachment_image_src($image->ID, $default);
$img = get_headers($img_atts[0], 1);
$size = $img["Content-Length"]/1024;
echo round($size);
}

Bun venit pe wpse! De ce este această abordare mai bună decât răspunsul acceptat? Consideră să adaugi mai multe explicații despre cum/de ce această abordare este mai bună sau cum rezolvă problema OP.

Răspunsul tău ar putea fi îmbunătățit cu informații suplimentare de susținere. Te rugăm să [editezi] pentru a adăuga detalii suplimentare, cum ar fi citări sau documentație, astfel încât alții să poată confirma că răspunsul tău este corect. Poți găsi mai multe informații despre cum să scrii răspunsuri bune în centrul de ajutor.

Funcție simplă pentru a obține dimensiunea fișierului atașamentului folosind ID-ul atașamentului, similar cu un alt răspuns de aici, dar cu o mică verificare a erorilor. Există și un parametru suplimentar pentru a specifica numărul de zecimale de returnat:
function tm_get_attachment_size($attachment_id, $decimals) {
$file = get_attached_file( $attachment_id );
return $file ? size_format( filesize($file), $decimals ) : 0;
}
De exemplu, să presupunem că am un atașament cu ID-ul 99: tm_get_attachment_size(99, 1)
ar returna '1.4 MB'.
