Wie bekomme ich die Größe einer Anhangsdatei?
-
16-10-2019 - |
Frage
Ich verwende den folgenden Vorlagencode, um Anhangslinks 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 Größe der Datei anzeigen. Wie kann ich das machen?
Ich vermute, ich könnte den Pfad der Datei (via "bestimmen wp_upload_dir()
und ein substr()
von wp_get_attachment_url()
) und Ruf an filesize()
Aber das scheint chaotisch und ich frage mich nur, ob es eine Methode in WordPress integriert hat.
Lösung
Soweit ich weiß, hat WordPress nichts dafür eingebaut, ich würde es einfach tun:
filesize( get_attached_file( $attachment->ID ) );
Andere Tipps
Ich habe dies bereits in Funktionen.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');
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 );
Refs: get_attached_file (), Dateigröße(), size_format ()
Notiz : Definieren Sie Ihre $attachment_id
Um die Größe einer Datei zu ermitteln, die über das benutzerdefinierte Fields -Plugin hinzugefügt wurde, habe ich Folgendes gemacht:
$fileObject = get_field( 'file ');
$fileSize = size_format( filesize( get_attached_file( $fileObject['id'] ) ) );
Stellen Sie einfach sicher, dass Sie den "Rückgabewert" des benutzerdefinierten Feldes auf "Dateiobjekt" festlegen.
Es gibt eine einfachere Lösung, um menschliche lesbare Dateigrößen zu erhalten.
$attachment_id = $attachment->ID;
$attachment_meta = wp_prepare_attachment_for_js($attachment_id);
echo $attachment_meta['filesizeHumanReadable'];
Ich suchte nach demselben und fand diese 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 bei wp_get_attachment_metadata()
Zumindest für Audio wird die Dateigröße als "Metadaten" gespeichert.
$metadata = wp_get_attachment_metadata( $attachment_id );
echo $metadata['filesize'];
Dies nicht dürfen Seien Sie der Fall für Bilder und Video.