Comment puis-je obtenir la taille d'un fichier joint?


35

J'utilise le code de modèle suivant pour afficher les liens en pièce jointe:

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

mais après le lien, j'ai besoin d'afficher la taille du fichier. Comment puis-je faire ceci?

Je suppose que je pourrais déterminer le chemin du fichier (via wp_upload_dir()et un substr()de wp_get_attachment_url()) et appeler, filesize()mais cela semble compliqué, et je me demande simplement s'il existe une méthode intégrée à WordPress.


Fait intéressant, il n’existe aucune fonctionnalité dans le backend permettant d’afficher la taille d’un fichier, que ce soit en détail ou dans la liste. Ticket n ° 8739
hakre

Réponses:


43

Autant que je sache, WordPress n'a rien d'intégré à cela, je voudrais juste faire:

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


Ah, ça a l'air bien mieux que de déconner, wp_upload_dir()etc.!
Bobby Jack

J'ai besoin d'obtenir seulement la taille du fichier d'une pièce jointe. J'ai utilisé get_the_ID () dans post_parent. mais pas d'utilisation.
KarSho

10

J'ai déjà utilisé cela dans functions.php pour afficher la taille du fichier dans un format facilement lisible:

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

Et puis dans mon template:

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

8
Il n'est pas nécessaire de créer une nouvelle fonction. WP a deux d'entre eux intégrés dans le noyau. size_format()etwp_convert_bytes_to_hr()
Brady

8
On dirait que wp_convert_bytes_to_hr () est désormais obsolète en faveur de size_format ()
davemac


3

Pour trouver la taille d'un fichier ajouté via le plugin de champs personnalisés, j'ai fait ceci:

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

Assurez-vous simplement que vous définissez la "Valeur de retour" du champ personnalisé sur "Objet de fichier".


3

Il existe une solution plus simple, qui consiste à obtenir des tailles de fichiers lisibles par l’homme.

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

echo $attachment_meta['filesizeHumanReadable'];

theres une wp_ funktion pour tout ;-)
Thomas Fellinger

Devrait être la réponse acceptée
utilisateur1676224

1

Je cherchais la même chose et ai trouvé cette solution intégrée 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'];
}

Voir plus à wp_get_attachment_metadata()


2
La question concerne la taille du fichier en nombre d'octets et non en dimensions d'image.
Rarst

Doh, ça me manque de lire. :-)
Vayu

1

Pour l’audio au moins, la taille du fichier est enregistrée en tant que "métadonnées".

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

Ce n'est peut- être pas le cas pour les images et les vidéos.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.