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.


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


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

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


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”.


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'];

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


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.