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.
KarSho
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()
Scott
Sembra che wp_convert_bytes_to_hr() sia ora deprecata a favore di size_format()
davemac
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.
Buttered_Toast
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.
User
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'.