Comment puis-je obtenir la taille d'un fichier de pièce jointe?
-
16-10-2019 - |
Question
J'utilise le code du modèle ci-dessous pour afficher les liens d'attachement:
$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 je besoin d'afficher la taille du fichier. Comment puis-je faire?
Je suppose que je pourrais déterminer le chemin du fichier (via wp_upload_dir()
et un substr()
de wp_get_attachment_url()
) et filesize()
d'appel, mais qui semble en désordre, et je me demande s'il y a une méthode intégrée dans WordPress.
La solution
Pour autant que je sache, WordPress n'a rien construit pour cela, je voudrais juste faire:
filesize( get_attached_file( $attachment->ID ) );
Autres conseils
J'ai utilisé auparavant 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 modèle:
echo getSize('insert reference to file here');
Je ferais:
$attachment_filesize = filesize( get_attached_file( $attachment_id ) );
Ou avec une taille lisible comme 423.82 KB
$attachment_filesize = size_format( filesize( get_attached_file( $attachment_id ) ), 2 );
Réfs: get_attached_file () , de taille du fichier () , size_format ()
Remarque: Définissez votre $attachment_id
Pour la taille d'un fichier ajouté à travers le plugin champs personnalisés, je l'ai fait:
$fileObject = get_field( 'file ');
$fileSize = size_format( filesize( get_attached_file( $fileObject['id'] ) ) );
Assurez-vous que vous définissez « Return Value » du champ personnalisé « Object File ».
Il y a une solution plus facile, pour obtenir la taille des fichiers lisibles par l'homme.
$attachment_id = $attachment->ID;
$attachment_meta = wp_prepare_attachment_for_js($attachment_id);
echo $attachment_meta['filesizeHumanReadable'];
Je cherchais même et trouvé ce WordPress solution intégrée.
$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()
Pour l'audio au moins, la taille du fichier est enregistré en tant que « métadonnées ».
$metadata = wp_get_attachment_metadata( $attachment_id );
echo $metadata['filesize'];
ne peut pas le cas pour les images et la vidéo.