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.

Bobby Jack
quelle
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 ) );

Joe Hoyle
quelle
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');
Davemac
quelle
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

l2aelba
quelle
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.

William Schroeder McKinley
quelle
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'];
Zoltan Kiraly
quelle
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()

Vayu
quelle
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.

Henrywright
quelle