Иногда для лучшего восприятия информации и подогрева читателей бывает необходимо показать, сколько каких файлов включено в пост. Сейчас все решает визуальное восприятие, и порой изображения, видео и аудио составляют большую часть контента. По крайней мере в одном из блогов присоединенные файлы играют не меньшую роль, чем слова, а иногда и вовсе составляют все содержимое публикаций, поэтому я решил выводить помимо количества просмотров и комментариев еще и информацию о том, сколько разных мультимедийных фалов вставлено в посты.
Для подсчета изображений я в цикл вывода содержимого постов вставил код подсчета изображений:
get_var( "SELECT COUNT(*) FROM $wpdb->posts WHERE post_parent = '$post->ID' AND post_type = 'attachment' AND post_mime_type = 'image/jpeg'" ); $img_png_count = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->posts WHERE post_parent = '$post->ID' AND post_type = 'attachment' AND post_mime_type = 'image/png'" ); $img_gif_count = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->posts WHERE post_parent = '$post->ID' AND post_type = 'attachment' AND post_mime_type = 'image/gif'" ); $img_count = $img_jpg_count+$img_png_count+$img_gif_count; ?>
Этот код считает количество файлов, присоединенных к посту, выбирая только изображения, используя post_type = ‘attachment’ AND post_mime_type. Почему-то WordPress отказался считать файлы всех изображений по общему указанию post_mime_type = ‘image’, поэтому я подсчитал количество изображений в форматах GIF, PNG и JPG, а потом просто суммировал эти значения. Чтобы вывести количество изображений, вставленных в пост путем стандартной загрузки в медиатеку, нужно просто в нужно месте использовать:
</pre> <p>Сейчас закачивать в блог можно не только изображения, но и аудио и видео. Подобным же образом можно подсчитывать и их количество в посте. Например, количество файлов формата MP3, присоединенных к посту, выводится так:</p> <pre>get_var( "SELECT COUNT(*) FROM $wpdb->posts WHERE post_parent = '$post->ID' AND post_type = 'attachment' AND post_mime_type = 'audio/mpeg'" ); echo $audio_count; ?>[info txt=”Под словами присоединенный к посту или вставленный в пост я имею ввиду файлы, закачанные в блог стандартным способом – с помощью добавления файлов в библиотеку при редактировании поста.”]
Как видим, результат достигается путем подсчета вложений, используя post_mime_type. Распространенные MIME-типы файлов:
- image/jpeg
- image/png
- image/gif
- video/mpeg
- video/mp4
- video/quicktime
- video/x-flv
- text/csv
- text/plain
- text/xml
- audio/ac3
- audio/MPA
- audio/mpeg
- application/pdf
Чтобы подсчитывать общее количество всех вложений, можно создать функцию. Этот код нужно вставить в файл functions.php используемой вами темы:
function attachment_count() { global $post; $attachments = get_posts( array( 'post_type' => 'attachment', 'posts_per_page' => -1 ) ); $att_count = 0; if ( $attachments ) { foreach ( $attachments as $attachment ) { if ( 'gallery' == get_post_type($attachment->post_parent) ) { $att_count = $att_count + 1; } } echo $att_count; } }
Для вывода результата нужно в файле single.php использовать:
</pre> <p>Тот же результат можно получит немного по-другому:</p> <pre> get_var("SELECT COUNT(ID) FROM {$wpdb->prefix}posts WHERE post_type = 'attachment' && ID=$id"); echo $total_attachments; ?>