[Помогите] Вывод размера вложения

Тема в разделе "Wordpress", создана пользователем rev1, 23 апр 2015.

Модераторы: DzSoft, Sorcus
  1. rev1

    rev1 Постоялец

    Регистр.:
    9 янв 2014
    Сообщения:
    50
    Симпатии:
    10
    Здравствуйте.
    Гуглил не нашел.
    Как вывести размер вложенного файла в новости?
     
  2. vytyacom

    vytyacom Постоялец

    Регистр.:
    19 ноя 2014
    Сообщения:
    136
    Симпатии:
    55
    Насколько знаю у ВП нет своих функций для вывода объема файла. Зато у пхп есть.

    А какой формат файлов? Как они вкладываются? есть специальное поле для указания ссылки или прям в контенте?

    В принципе Перейти по ссылке, возможно поможет. Если нет, то нужны детали, о которых написал выше.
     
  3. rev1

    rev1 Постоялец

    Регистр.:
    9 янв 2014
    Сообщения:
    50
    Симпатии:
    10
    формат zip, заливаются вложением к новости.

    решение по ссылке сделал, но пишет "0.0", не хочет размер писать.
     
  4. vytyacom

    vytyacom Постоялец

    Регистр.:
    19 ноя 2014
    Сообщения:
    136
    Симпатии:
    55
    Не все так просто.
    Тот скрипт - функция, ее инициализацию надо включить в шаблон. А в инициализацию вставить файл, для начала проверить если у поста вложенные файлы.
    Я попробую уже завтра одолеть эту задачку.
     
  5. vytyacom

    vytyacom Постоялец

    Регистр.:
    19 ноя 2014
    Сообщения:
    136
    Симпатии:
    55
    В общем, вот решение, только что проверил - работает.

    В functions.php
    Код:
    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))));
    }
    
    В файл шаблона записи (single.php или что там отвечает за вывод сингл поста, в котором надо выводить инфу о файле) в том месте где надо вывести инфу (после контента, до контента, как удобно.
    Код:
    <?php
         $attachments = get_posts( array(
           'post_type' => 'attachment',
           'posts_per_page' => -1,
           'post_parent' => $post->ID,
           'exclude'  => get_post_thumbnail_id()
         ) )
     
         if ( $attachments ) {
           echo '<ul>';
           foreach ( $attachments as $attachment ) {
             $url = wp_get_attachment_url( $attachment->ID );
             $title = get_the_title( $attachment->ID );
             $filesize = getSize( get_attached_file( $attachment->ID ) );
             echo '<li><a href="'.$url.'">' . $title . '</a> (' . $filesize . ')</li>';
           }
           echo '</ul>';
         }
    ?>
    
    Соответственно скрипт проверяет есть ли аттачменты, если есть и не один - их выводит в цикле, так же выводит и инфу об их размере.
    На выходе - список, далее его можно уже стилизовать как угодно. В принципе если такая структура не подходит, то можно отредактировать html теги в скрипте - ul, li, a
    Скрипт из фанкшона можно вставить и в сам шаблон, чтоб туда сюда между файлами не скакать, если конечно функция будет использоваться только на этой странице.
     
  6. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.522
    Симпатии:
    1.376
    В getSize($file) первой строкой добавьте:
    PHP:
    if (!is_file($file)) return 0;
    В противном случае, можем получать Warning: Division by zero