Eu estou usando o seguinte código de modelo para exibir links de anexo:
$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);
}
mas depois do link eu preciso mostrar o tamanho do arquivo. Como posso fazer isso?
Eu estou supondo que eu poderia determinar o caminho do arquivo (via wp_upload_dir()
e substr()
of wp_get_attachment_url()
) e chamar filesize()
, mas isso parece confuso, e eu só estou querendo saber se há um método embutido no WordPress.
Tanto quanto eu sei, o WordPress não tem nada embutido para isso, gostaria apenas de fazer:
filesize( get_attached_file( $attachment->ID ) );
Eu usei isso antes em functions.php para exibir o tamanho do arquivo em um formato de fácil leitura:
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 então no meu template:
echo getSize('insert reference to file here');
Eu faria:
$attachment_filesize = filesize( get_attached_file( $attachment_id ) );
Ou com tamanho legível como 423.82 KB
$attachment_filesize = size_format( filesize( get_attached_file( $attachment_id ) ), 2 );
Refs: get_attached_file () , filesize () , size_format ()
Nota: Defina seu $attachment_id
Há uma solução mais fácil para obter tamanhos de arquivo legíveis para humanos.
$attachment_id = $attachment->ID;
$attachment_meta = wp_prepare_attachment_for_js($attachment_id);
echo $attachment_meta['filesizeHumanReadable'];
Para encontrar o tamanho de um arquivo adicionado por meio do plug-in de campos personalizados, fiz o seguinte:
$fileObject = get_field( 'file ');
$fileSize = size_format( filesize( get_attached_file( $fileObject['id'] ) ) );
Apenas certifique-se de definir o "Valor de Retorno" do campo personalizado como "Objeto de Arquivo".
Para áudio, pelo menos, o tamanho do arquivo é salvo como "metadados".
$metadata = wp_get_attachment_metadata( $attachment_id );
echo $metadata['filesize'];
Este não pode ser o caso de imagens e vídeo.
Eu estava procurando o mesmo e encontrei esta solução interna do 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'];
}
Veja mais em wp_get_attachment_metadata()