WordPress позволяет присоединять к посту практически любые файлы – достаточно воспользоваться кнопкой добавления медиа-контента. Закачанные таким образом файлы записываются в библиотеку медиафайлов, а в базе данных делается запись, что эти файлы присоединены к определенному посту.
Я уже писал о плагине Auto Attachments, который позволяет выводить список файлов, присоединенных к посту.
Такой список может быть полезен, например, если вы публикуете статью, в которой используются разные файлы – архивы, электронные документы, мультимедийный контент. Иногда нужно собрать все используемые в посте файлы отдельным списком – для этого плагин подходит идеально. Однако есть возможность вывести список присоединенных к посту файлов и без использования дополнительных плагинов, причем этот список можно оформить по своему усмотрению. Давайте посмотрим, как это можно сделать.
Создадим функцию, которая будет автоматически в конце каждого поста выводить список присоединенных постов. Для этого нужно вставить в файл functions.php используемой в блоге темы:
add_filter( 'the_content', 'my_the_content_filter' ); function my_the_content_filter( $content ) { global $post; if ( is_single() && $post->post_type == 'post' && $post->post_status == 'publish' ) { $attachments = get_posts( array( 'post_type' => 'attachment', 'posts_per_page' => 0, 'post_parent' => $post->ID ) ); if ( $attachments ) { $content .= '<h3>Присоединенные файлы</h3>'; $content .= '<ul class="post-attachments">'; foreach ( $attachments as $attachment ) { $class = "post-attachment mime-" . sanitize_title( $attachment->post_mime_type ); $title = wp_get_attachment_link( $attachment->ID, false ); $content .= '<li class="' . $class . '">' . $title . '</li>'; } $content .= '</ul>'; } } return $content; }
В конце каждого поста появится список всех файлов, добавленных во время редактирования поста в библиотеку медиафайлов.
Для того, чтобы сделать этот список более привлекательным, давайте для каждого типа файлов добавим индивидуальную иконку. Для этого нужно создать файл attachments.css, расположенный рядом с файлом style.css, и вставить в него оформление для списка присоединенных файлов разного типа:
.post-attachment.mime-imagejpeg, .post-attachment.mime-imagepng { background-image: url(icons/document-image.png); } .post-attachment.mime-applicationzip { background-image: url(icons/document-zipper.png); } .post-attachment.mime-applicationpdf { background-image: url(icons/document-pdf.png); } .post-attachment.mime-applicationx-shockwave-flash { background-image: url(icons/document-flash-movie.png); } .post-attachment.mime-applicationmsword { background-image: url(icons/document-word.png); }
Если хотите, чтобы все типы файлов имели одинаковые иконки, то тогда содержимое файла attachments.css должно быть примерно таким:
ul.post-attachments { list-style: none; margin-left: 0; } li.post-attachment { background: url(icons/document.png) 0 4px no-repeat; padding-left: 24px; }
Для того, чтобы файл стилей для списка присоединенных файлов использовался автоматически, добавьте в functiond.php:
add_action( 'wp_print_styles', 'my_enqueue_style' ); function my_enqueue_style() { wp_enqueue_style( 'post-attachemnts', get_stylesheet_directory_uri() . '/attachments.css', array(), null ); }