Come ottengo la dimensione di un file allegato?
Sto usando il seguente codice template per visualizzare i link degli allegati:
$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);
}
ma dopo il link ho bisogno di visualizzare la dimensione del file. Come posso farlo?
Immagino che potrei determinare il percorso del file (tramite wp_upload_dir()
e un substr()
di wp_get_attachment_url()
) e chiamare filesize()
ma sembra disordinato, e mi chiedo se esista un metodo integrato in WordPress.
ho bisogno di ottenere solo la dimensione del file di un allegato del post. ho usato get_the_ID() in post_parent. ma non funziona.

Farei così:
$attachment_filesize = filesize( get_attached_file( $attachment_id ) );
Oppure con dimensioni leggibili come 423.82 KB
$attachment_filesize = size_format( filesize( get_attached_file( $attachment_id ) ), 2 );
Riferimenti: get_attached_file(), filesize(), size_format()
Nota: Definisci il tuo $attachment_id

Ho utilizzato questa funzione in functions.php per visualizzare la dimensione del file in un formato facilmente leggibile:
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))));}
E poi nel mio template:
echo getSize('inserisci qui il riferimento al file');

Non è necessario creare una nuova funzione. WP ne ha già due integrate nel core. size_format()
e wp_convert_bytes_to_hr()

Sembra che wp_convert_bytes_to_hr() sia ora deprecata a favore di size_format()

Per ottenere la dimensione di un file aggiunto tramite il plugin dei campi personalizzati, ho fatto così:
$fileObject = get_field( 'file' );
$fileSize = size_format( filesize( get_attached_file( $fileObject['id'] ) ) );
Assicurati solo di impostare il "Valore di Ritorno" del campo personalizzato su "Oggetto File".

Stavo cercando la stessa cosa e ho trovato questa soluzione integrata in 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'];
}
Vedi di più su wp_get_attachment_metadata()

Ottenere la dimensione del file immagine in 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);
}

Benvenuto su wpse! In che modo questo approccio è migliore della risposta accettata? Considera di aggiungere ulteriori spiegazioni su come/perché questo approccio sia migliore o come risolva il problema dell'OP.

La tua risposta potrebbe essere migliorata con informazioni aggiuntive di supporto. Per favore [modifica] per aggiungere ulteriori dettagli, come citazioni o documentazione, in modo che altri possano confermare che la tua risposta sia corretta. Puoi trovare maggiori informazioni su come scrivere buone risposte nel centro assistenza.

Funzione semplice per ottenere la dimensione del file di un allegato tramite l'ID dell'allegato, simile a un'altra risposta qui ma con un po' di controllo degli errori. C'è anche un parametro aggiuntivo per specificare il numero di decimali da restituire:
function tm_get_attachment_size($attachment_id, $decimals) {
$file = get_attached_file( $attachment_id );
return $file ? size_format( filesize($file), $decimals ) : 0;
}
Per esempio, supponiamo di avere un allegato con ID 99: tm_get_attachment_size(99, 1)
restituirebbe '1.4 MB'.
