¿Cómo obtengo el tamaño de un archivo adjunto?

35

Estoy usando el siguiente código de plantilla para mostrar enlaces de archivos adjuntos:

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

pero después del enlace necesito mostrar el tamaño del archivo. ¿Cómo puedo hacer esto?

Supongo que podría determinar la ruta del archivo (via wp_upload_dir()y a substr()of wp_get_attachment_url()) y llamar, filesize()pero eso parece desordenado, y me pregunto si hay un método integrado en WordPress.

Bobby Jack
fuente
Curiosamente, no hay funcionalidad en el back-end para mostrar el tamaño de un archivo, ya sea en detalles ni en la lista. Boleto # 8739
hakre

Respuestas:

43

Hasta donde sé, WordPress no tiene nada incorporado para esto, solo haría:

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

Joe Hoyle
fuente
Ah, ¡eso se ve mucho mejor que perder el tiempo, wp_upload_dir()etc.!
Bobby Jack
Necesito obtener solo un tamaño de archivo adjunto de publicación. Solía ​​get_the_ID () en post_parent. Pero no sirve de nada.
KarSho
10

He usado esto antes en functions.php para mostrar el tamaño del archivo en un formato fácil de leer:

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

Y luego en mi plantilla:

echo getSize('insert reference to file here');
davemac
fuente
8
No hay necesidad de crear una nueva función. WP tiene dos de ellos integrados en el núcleo. size_format()ywp_convert_bytes_to_hr()
Brady
8
Parece que wp_convert_bytes_to_hr () ahora ha quedado en desuso a favor de size_format ()
davemac
5

Yo lo haría :

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

O con un tamaño legible como 423.82 KB

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

Refs: get_attached_file () , filesize () , size_format ()

Nota: Defina su$attachment_id

l2aelba
fuente
3

Para encontrar el tamaño de un archivo agregado a través del complemento de campos personalizados, hice esto:

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

Solo asegúrese de establecer el "Valor de retorno" del campo personalizado en "Objeto de archivo".

William Schroeder McKinley
fuente
3

Hay una solución más fácil, para obtener tamaños de archivo legibles por humanos.

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

echo $attachment_meta['filesizeHumanReadable'];
Zoltan Kiraly
fuente
hay una función wp_ para todo ;-)
Thomas Fellinger
Debería ser la respuesta aceptada
user1676224
1

Estaba buscando lo mismo y encontré esta solución incorporada de 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'];
}

Ver más en wp_get_attachment_metadata()

Vayu
fuente
2
La pregunta es sobre el tamaño del archivo como en número de bytes, no como en las dimensiones de la imagen.
Rarst
Doh, extraño leer eso. :-)
Vayu
1

Al menos para el audio, el tamaño del archivo se guarda como "metadatos".

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

Este puede no ser el caso de imágenes y videos.

henrywright
fuente