¿Cómo obtengo el tamaño de un archivo adjunto?
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 (usando wp_upload_dir()
y un substr()
de wp_get_attachment_url()
) y llamar a filesize()
, pero eso parece desordenado, y me pregunto si hay algún método incorporado en WordPress.

necesito obtener solo el tamaño del archivo de un adjunto de publicación. Usé get_the_ID() en post_parent. pero no sirve.

Yo haría:
$attachment_filesize = filesize( get_attached_file( $attachment_id ) );
O con tamaño legible como 423.82 KB
$attachment_filesize = size_format( filesize( get_attached_file( $attachment_id ) ), 2 );
Referencias: get_attached_file(), filesize(), size_format()
Nota: Define tu $attachment_id

He utilizado esto antes en functions.php para mostrar el tamaño del archivo en un formato fácilmente legible:
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('inserta la referencia al archivo aquí');

No es necesario crear una nueva función. WordPress tiene dos de ellas integradas en el núcleo. size_format()
y wp_convert_bytes_to_hr()

Parece que wp_convert_bytes_to_hr() ahora ha quedado obsoleta en favor de size_format()

Para encontrar el tamaño de un archivo añadido a través del plugin de campos personalizados, hice esto:
$fileObject = get_field( 'file ');
$fileSize = size_format( filesize( get_attached_file( $fileObject['id'] ) ) );
Solo asegúrate de configurar el "Valor de Retorno" del campo personalizado como "Objeto de Archivo".

Estaba buscando lo mismo y encontré esta solución integrada 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()

Obtener el tamaño del archivo de imagen en 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);
}

Bienvenido a wpse! ¿En qué es mejor este enfoque que la respuesta aceptada? Considera añadir más explicación sobre cómo/por qué este enfoque es mejor o cómo resuelve el problema del OP.

Tu respuesta podría mejorarse con información adicional de apoyo. Por favor [edita] para añadir más detalles, como citas o documentación, para que otros puedan confirmar que tu respuesta es correcta. Puedes encontrar más información sobre cómo escribir buenas respuestas en el centro de ayuda.

Función simple para obtener el tamaño del archivo adjunto por su ID, similar a otra respuesta aquí pero con un poco de verificación de errores. También hay un parámetro adicional para especificar el número de decimales a devolver:
function tm_get_attachment_size($attachment_id, $decimals) {
$file = get_attached_file( $attachment_id );
return $file ? size_format( filesize($file), $decimals ) : 0;
}
Por ejemplo, digamos que tengo un ID de adjunto de 99: tm_get_attachment_size(99, 1)
devolvería '1.4 MB'.
