Cum obțin dimensiunea unui fișier atașat?

18 aug. 2010, 12:11:08
Vizualizări: 55.4K
Voturi: 40

Folosesc următorul cod în șablon pentru a afișa linkurile atașamentelor:

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

dar după link am nevoie să afișez dimensiunea fișierului. Cum pot face acest lucru?

Presupun că aș putea determina calea fișierului (folosind wp_upload_dir() și un substr() din wp_get_attachment_url()) și să apelez filesize(), dar pare dezordonat, și mă întreb dacă există o metodă deja implementată în WordPress.

1
Comentarii

Interesant, nu există nicio funcționalitate în backend pentru a afișa dimensiunea unui fișier, nici în detaliile, nici în lista de fișiere. Tichetul #8739

hakre hakre
19 aug. 2010 09:44:00
Toate răspunsurile la întrebare 9
3
49

Din câte știu, WordPress nu are nicio funcționalitate încorporată pentru asta, aș folosi pur și simplu:

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

18 aug. 2010 12:17:00
Comentarii

Ah - arată mult mai bine decât să te complici cu wp_upload_dir() etc.!

Bobby Jack Bobby Jack
18 aug. 2010 12:18:52

am nevoie să obțin doar mărimea fișierului unui singur atașament al postării. am folosit get_the_ID() în post_parent, dar nu funcționează.

KarSho KarSho
28 mar. 2013 13:20:16

Acesta este bun, dar atenție că filesize va arunca un avertisment dacă get_attached_file returnează false. Ar trebui să adaugi o verificare pentru a te asigura că get_attached_file returnează un fișier care există.

Alex Standiford Alex Standiford
7 dec. 2019 14:53:45
0
13

Aș face:

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

Sau cu dimensiune lizibilă precum 423.82 KB

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

Referințe: get_attached_file(), filesize(), size_format()

Notă: Definește-ți $attachment_id

27 mar. 2017 14:01:25
2
10

Am folosit acest cod în functions.php pentru a afișa dimensiunea fișierului într-un format ușor de înțeles:

function getSize($file){
$bytes = filesize($file); // Obține dimensiunea fișierului în bytes
$s = array('b', 'Kb', 'Mb', 'Gb'); // Unități de măsură
$e = floor(log($bytes)/log(1024)); // Calculează exponentul pentru unitatea corectă
return sprintf('%.2f '.$s[$e], ($bytes/pow(1024, floor($e))));} // Formatează rezultatul

Și apoi în template-ul meu:

echo getSize('inserează referința către fișier aici'); // Afișează dimensiunea fișierului
19 aug. 2010 06:16:18
Comentarii

Nu este nevoie să creezi o funcție nouă. WP are două funcții integrate în nucleu. size_format() și wp_convert_bytes_to_hr()

Scott Scott
27 oct. 2011 17:01:33

Se pare că wp_convert_bytes_to_hr() a fost acum depreciat în favoarea funcției size_format()

davemac davemac
14 mai 2012 05:35:11
2

Există o soluție mai simplă pentru a obține dimensiunile fișierelor într-un format ușor de înțeles.

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

echo $attachment_meta['filesizeHumanReadable'];
17 ian. 2017 10:39:51
Comentarii

există o funcție wp_ pentru orice ;-)

Thomas Fellinger Thomas Fellinger
6 nov. 2017 11:13:49

Ar trebui să fie răspunsul acceptat

user1676224 user1676224
16 ian. 2019 18:34:57
0

Pentru a afla dimensiunea unui fișier adăugat prin plugin-ul de câmpuri personalizate, am făcut astfel:

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

Asigurați-vă că ați setat "Valoarea returnată" la "Obiect fișier" în setările câmpului personalizat.

21 aug. 2015 20:33:54
2

Căutam același lucru și am găsit această soluție integrată în 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'];
}

Află mai multe la wp_get_attachment_metadata()

5 iul. 2011 17:17:04
Comentarii

Întrebarea este despre dimensiunea fișierului în număr de bytes, nu despre dimensiunile imaginii.

Rarst Rarst
5 iul. 2011 17:26:26

Ups, am citit greșit. :-)

Vayu Vayu
26 aug. 2011 15:57:05
0

Pentru fișierele audio, cel puțin, dimensiunea fișierului este salvată ca "metadate".

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

Aceasta poate să nu fie cazul pentru imagini și videoclipuri.

27 mai 2017 16:47:52
3

Obține dimensiunea fișierului de imagine în WordPress:

$query_images_args = array(
    'post_type' => 'attachment',
    'post_mime_type' => 'image',
    'post_status' => 'inherit',
    'posts_per_page' => 10,
);

$query_images = new WP_Query($query_images_args);

foreach ($query_images->posts as $image) {
    $img_atts = wp_get_attachment_image_src($image->ID, $default);
    $img = get_headers($img_atts[0], 1);
    $size = $img["Content-Length"]/1024;
    echo round($size);

}
27 oct. 2021 09:55:11
Comentarii

Bun venit pe wpse! De ce este această abordare mai bună decât răspunsul acceptat? Consideră să adaugi mai multe explicații despre cum/de ce această abordare este mai bună sau cum rezolvă problema OP.

Buttered_Toast Buttered_Toast
27 oct. 2021 10:42:48

Răspunsul tău ar putea fi îmbunătățit cu informații suplimentare de susținere. Te rugăm să [editezi] pentru a adăuga detalii suplimentare, cum ar fi citări sau documentație, astfel încât alții să poată confirma că răspunsul tău este corect. Poți găsi mai multe informații despre cum să scrii răspunsuri bune în centrul de ajutor.

User User
27 oct. 2021 10:53:37

Această abordare pare mult superioară, adică utilizarea funcției get_headers în loc de funcția filesize din PHP. Această metodă cu get_headers nu aruncă eroarea 'stat failed' dacă dimensiunea fișierului lipsește.

Leora Deans Leora Deans
22 ian. 2022 01:20:23
0

Funcție simplă pentru a obține dimensiunea fișierului atașamentului folosind ID-ul atașamentului, similar cu un alt răspuns de aici, dar cu o mică verificare a erorilor. Există și un parametru suplimentar pentru a specifica numărul de zecimale de returnat:

function tm_get_attachment_size($attachment_id, $decimals) {
    $file = get_attached_file( $attachment_id );
    return $file ? size_format( filesize($file), $decimals ) : 0;
}

De exemplu, să presupunem că am un atașament cu ID-ul 99: tm_get_attachment_size(99, 1) ar returna '1.4 MB'.

3 mar. 2021 23:15:06