Come posso ottenere le dimensioni di un file allegato?


35

Sto usando il seguente codice modello per visualizzare i collegamenti 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 collegamento ho bisogno di visualizzare le dimensioni del file. Come posso fare questo?

Immagino di poter determinare il percorso del file (via wp_upload_dir()e a substr()di wp_get_attachment_url()) e chiamare filesize()ma sembra disordinato, e mi chiedo solo se c'è un metodo integrato in WordPress.


È interessante notare che non esiste alcuna funzionalità nel back-end per visualizzare la dimensione di un file nei dettagli né nell'elenco. Biglietto n. 8739
hakre,

Risposte:


43

Per quanto ne so, WordPress non ha nulla per questo, vorrei solo:

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


Ah - sembra molto meglio che scherzare con wp_upload_dir()ecc.!
Bobby Jack,

ho bisogno di ottenere solo una dimensione del file dell'allegato post. ho usato get_the_ID () in post_parent. ma inutile.
KarSho,

10

L'ho usato in precedenza in Functions.php per visualizzare le dimensioni 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 modello:

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

8
Non è necessario creare una nuova funzione. WP ne ha due integrati nel core. size_format()ewp_convert_bytes_to_hr()
Brady,

8
Sembra che wp_convert_bytes_to_hr () sia stato deprecato a favore di size_format ()
davemac

5

Farei :

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

O con dimensioni leggibili come 423.82 KB

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

Rif : get_attached_file () , filesize () , size_format ()

Nota: definire il tuo$attachment_id


3

Per trovare la dimensione di un file aggiunto tramite il plug-in dei campi personalizzati, ho fatto questo:

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

Assicurati solo di impostare il "Valore restituito" del campo personalizzato su "Oggetto file".


3

C'è una soluzione più semplice per ottenere dimensioni di file leggibili dall'uomo.

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

echo $attachment_meta['filesizeHumanReadable'];

c'è una wp_ funktion per tutto ;-)
Thomas Fellinger il

Dovrebbe essere la risposta accettata
user1676224

1

Stavo cercando lo stesso e ho trovato questa soluzione integrata di 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()


2
La domanda riguarda le dimensioni del file come in numero di byte, non come nelle dimensioni dell'immagine.
Rarst

Doh, mi manca leggerlo. :-)
Vayu,

1

Almeno per l'audio, la dimensione del file viene salvata come "metadati".

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

Questo potrebbe non essere il caso di immagini e video.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.