Como obtenho o tamanho de um arquivo anexo?


35

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 após o link, preciso exibir o tamanho do arquivo. Como posso fazer isso?

Eu estou supondo que eu poderia determinar o caminho do arquivo (via wp_upload_dir()e um substr()de wp_get_attachment_url()) e chamar, filesize()mas isso parece confuso, e só estou me perguntando se existe um método incorporado ao WordPress.


Curiosamente, não há funcionalidade no back-end para exibir o tamanho de um arquivo em detalhes nem na lista. # 8739
hakre

Respostas:


43

Até onde eu sei, o WordPress não tem nada embutido para isso, eu faria:

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


Ah - isso parece muito melhor do que brincar com wp_upload_dir()etc!
Bobby Jack

Eu preciso obter apenas o tamanho do arquivo de um anexo de postagem. Eu usei get_the_ID () em post_parent. mas não adianta.
28413 KarSho

10

Eu usei isso antes em functions.php para exibir o tamanho do arquivo em um formato facilmente legível:

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 modelo:

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

8
Não há necessidade de criar uma nova função. O WP possui dois deles integrados ao núcleo. size_format()ewp_convert_bytes_to_hr()
Brady

8
Looks como wp_convert_bytes_to_hr () agora foi preterido em favor de size_format ()
davemac


3

Para encontrar o tamanho de um arquivo adicionado através 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".


3

Existe uma solução mais fácil, para obter tamanhos de arquivos legíveis por humanos.

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

echo $attachment_meta['filesizeHumanReadable'];

Há uma wp_ funktion para tudo ;-)
Thomas Fellinger

Deve ser a resposta aceita
user1676224 16/01

1

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()


2
A questão é sobre o tamanho do arquivo, como no número de bytes, não nas dimensões da imagem.
Rarst

Doh, sinto falta de ler isso. :-)
Vayu

1

Pelo menos para o áudio, o tamanho do arquivo é salvo como "metadados".

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

Este pode não ser o caso de imagens e vídeo.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.