Wie erhalte ich die Größe einer Anhangsdatei?


34

Ich verwende den folgenden Vorlagencode, um Anhang-Links anzuzeigen:

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

aber nach dem Link muss ich die Dateigröße anzeigen. Wie kann ich das machen?

Ich schätze, ich könnte den Pfad der Datei (via wp_upload_dir()und a substr()von wp_get_attachment_url()) bestimmen und aufrufen, filesize()aber das scheint chaotisch zu sein, und ich frage mich nur, ob es eine in WordPress integrierte Methode gibt.


Interessanterweise gibt es im Backend keine Funktion, um die Größe einer Datei in Details oder in der Liste anzuzeigen. Ticket # 8739
hakre

Antworten:


42

Soweit ich weiß, hat WordPress nichts dafür eingebaut, ich würde einfach tun:

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


Ah - das sieht viel besser aus als herumzuspielen wp_upload_dir()usw.!
Bobby Jack

Ich brauche nur die Dateigröße eines Post-Anhangs. Ich habe get_the_ID () in post_parent verwendet. aber nützt nichts.
KarSho

10

Ich habe dies zuvor in functions.php verwendet, um die Dateigröße in einem leicht lesbaren Format anzuzeigen:

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

Und dann in meiner Vorlage:

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

8
Es ist nicht erforderlich, eine neue Funktion zu erstellen. WP hat zwei davon im Kern eingebaut. size_format()undwp_convert_bytes_to_hr()
Brady

8
Es sieht so aus, als ob wp_convert_bytes_to_hr () jetzt zugunsten von size_format ()
davemac

5

Ich würde tun:

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

Oder mit lesbarer Größe wie 423.82 KB

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

Verweise : get_attached_file () , filesize () , size_format ()

Hinweis: Definieren Sie Ihre$attachment_id


3

Um die Größe einer Datei zu ermitteln, die über das Plugin für benutzerdefinierte Felder hinzugefügt wurde, habe ich Folgendes ausgeführt:

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

Stellen Sie einfach sicher, dass Sie den "Rückgabewert" des benutzerdefinierten Felds auf "Dateiobjekt" setzen.


3

Es gibt eine einfachere Lösung, um lesbare Dateigrößen zu erhalten.

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

echo $attachment_meta['filesizeHumanReadable'];

Theres ein wp_ funktion für alles ;-)
Thomas Fellinger

Sollte die akzeptierte Antwort sein
user1676224

1

Ich suchte das Gleiche und fand diese in WordPress integrierte Lösung.

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

Sehen Sie mehr an wp_get_attachment_metadata()


2
Die Frage bezieht sich auf die Dateigröße in Bezug auf die Anzahl der Bytes und nicht auf die Bildgröße.
Rarst

Doh, ich vermisse das zu lesen. :-)
Vayu

1

Zumindest für Audio wird die Dateigröße als "Metadaten" gespeichert.

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

Dies ist bei Bildern und Videos möglicherweise nicht der Fall.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.