Jak uzyskać rozmiar pliku załącznika?

34

Używam następującego kodu szablonu, aby wyświetlić linki do załączników:

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

ale po linku muszę wyświetlić rozmiar pliku. W jaki sposób mogę to zrobić?

Zgaduję mogę określić ścieżkę do pliku (za pośrednictwem wp_upload_dir()i substr()od wp_get_attachment_url()) i wywołanie filesize()ale wydaje bałagan, a ja po prostu zastanawiasz się, czy jest jakiś sposób wbudowane w WordPressie.

Bobby Jack
źródło
Co ciekawe, w backendie nie ma funkcji wyświetlania rozmiaru pliku bardziej szczegółowo ani na liście. Bilet #
8739

Odpowiedzi:

42

O ile mi wiadomo, WordPress nie ma w tym nic wbudowanego, po prostu zrobiłbym:

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

Joe Hoyle
źródło
Ach - to wygląda znacznie lepiej niż mieszanie się z wp_upload_dir()itp.!
Bobby Jack
Muszę uzyskać tylko jeden rozmiar załącznika do postu. Użyłem get_the_ID () w post_parent. ale bezużyteczne.
KarSho
10

Użyłem tego wcześniej w functions.php, aby wyświetlić rozmiar pliku w łatwo czytelnym formacie:

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

A potem w moim szablonie:

echo getSize('insert reference to file here');
davemac
źródło
8
Nie ma potrzeby tworzenia nowej funkcji. WP ma dwa z nich wbudowane w rdzeń. size_format()iwp_convert_bytes_to_hr()
Brady
8
Wygląda na to, że wp_convert_bytes_to_hr () zostało wycofane na korzyść size_format ()
davemac
5

Chciałbym zrobić :

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

Lub z czytelnym rozmiarem jak 423.82 KB

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

Odnośniki: get_attached_file () , filesize () , size_format ()

Uwaga: Zdefiniuj swój$attachment_id

L2aelba
źródło
3

Aby znaleźć rozmiar pliku dodanego za pomocą wtyczki pól niestandardowych, zrobiłem to:

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

Upewnij się tylko, że ustawiłeś „Zwracaną wartość” pola niestandardowego na „Obiekt pliku”.

William Schroeder McKinley
źródło
3

Istnieje prostsze rozwiązanie, aby uzyskać rozmiary plików czytelne dla człowieka.

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

echo $attachment_meta['filesizeHumanReadable'];
Zoltan Kiraly
źródło
jest funkcja wp_ na wszystko ;-)
Thomas Fellinger
Powinna być zaakceptowana odpowiedź
1676224
1

Szukałem tego samego i znalazłem to wbudowane rozwiązanie 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'];
}

Zobacz więcej na wp_get_attachment_metadata()

Vayu
źródło
2
Pytanie dotyczy rozmiaru pliku wyrażonego w liczbie bajtów, a nie w wymiarach obrazu.
Rarst
Doh, tęsknię za przeczytaniem tego. :-)
Vayu
1

Przynajmniej w przypadku dźwięku rozmiar pliku jest zapisywany jako „metadane”.

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

Może to nie dotyczyć obrazów i wideo.

henrywright
źródło