Расширенное использование вложений WordPress: Создание специального изображения для категории

СКАЧАТЬ ИСХОДНЫЕ ФАЙЛЫ | ПОСМОТРЕТЬ ДЕМО

archive-with-image

Эта статья является заключительной из серии о работе с изображениями во вложениях WordPress, которые предоставляют нам дополнительные возможности.

В этой серии статей я рассказываю:

  • О присвоении вложениям категорий и таксономий;
  • О создании запросов медиафайлов по категориям и таксономиям для вывода в пользовательском цикле;
  • Об использовании запросов таксономий и категорий изображений для их вывода на страницах архивов;
  • О добавлении изображений терминам и таксономиям в качестве «специального«.

В первой части я показала, как создать новые таксономии для вложений. Во второй части я показала, как создать файл пользовательского шаблона для документов и добавить цикл, который выводит ссылки на медиафайл для каждого документа. А в третьей части я создала файл пользовательского шаблона для таксономии gallery-category, который выводит все изображения с данным термином в галерее на странице архива.

В этой заключительной статье я расскажу, как присвоить изображению категорию, а затем отредактировать шаблон архива категории, чтобы вывести это изображение в качестве «специального«. Аналогичным образом вы можете сделать то же самое для терминов тегов или таксономий.

Для этой статьи я создам дочернюю тему от темы twentyfourteen. Созданная тема включает в себя файл функций и файл пользовательского шаблона для архивов категорий. Вы можете скачать эту тему по ссылке.

Что вам понадобится

  • Установленная система WordPress;
  • Доступ по FTP (или установленный локальный веб-сервер);
  • Редактор кода.

1. Применение категорий к вложениям

По умолчанию WordPress не позволяет назначать категории и теги для вложений. Как легко это исправить, я показала в предыдущих статьях по назначению категорий и тегов для вложений.

Примечание: Этот метод работает для тегов и категорий. Если вы применяете его для собственных таксономий, то необходимо во время регистрации таксономии указать вложения в качестве типа записей, к которым она применяется. Данная процедура описана в первой части этой серии.

В папке темы создайте файл с именем functions.php и добавьте в него следующий код:

<?php  
// добавление категорий для вложений  
function wptp_add_categories_to_attachments() {
      register_taxonomy_for_object_type( 'category', 'attachment' );  
}  
add_action( 'init' , 'wptp_add_categories_to_attachments' ); 
?>

Здесь я использовала функцию register_taxonomy_for_object_type(), чтобы добавить категории для вложений. Теперь, когда вы перейдете в раздел Медиафайлы> Библиотека, вы увидите, что категории уже подключены для медиафайлов.

Дальше нам нужно добавить несколько изображений: по одному для каждой категории. Вы также должны добавить еще одну категорию под названием «Featured» и назначить ее для каждого изображения.

На рисунке ниже приведен снимок панели редактирования, в которой выводятся и категории:

part4-image-with-categories

На этом скриншоте приведены все мои изображения с назначенными категориями:

advanced-use-of-attachments-in-wordpress-part4-media-library-with-cate

Я также добавлю несколько записей и помещу их в соответствующие категории, чтобы они отображались на страницах архивов:

posts-with-categories

2. Создание шаблона категории

Далее нам нужно создать пользовательский шаблон категории. Так как моя тема является дочерней от twentyfourteen, я скопирую в нее файл category.php этой темы, с некоторыми изменениями в начальных комментариях:

<?php  
/**   
 * The template for displaying Category pages   
 * Custom template which displays a featured image first.   
 * Supports Part 4 of tutorial series on Advanced Use of Images in WordPress for WPTutsplus   
 */ get_header();  ?>
<section class="content-area" id="primary">
  <div class="site-content" id="content" role="main"><?php if ( have_posts() ) : ?>
    <header class="archive-header">
      <h1 class="archive-title"></h1>
        <?php 
          // Показать дополнительное описание термина.
          $term_description = term_description();
          if ( ! empty( $term_description ) ) :
            printf( '<div class="taxonomy-description">%s</div>', $term_description );
          endif;
        ?>
    </header><!-- .archive-header -->

<?php   
// Запуск цикла.                     
while ( have_posts() ) : the_post();                         
      /*                           
       * Include the post format-specific template for the content. If you want to                              
       * use this in a child theme, then include a file called called content-___.php                               
       * (where ___ is the post format) and that will be used instead.                         
       */                       
      get_template_part( 'content', get_post_format() );                       
    endwhile;

    // Переход к предыдущей/следующей странице.                      
    twentyfourteen_paging_nav();               
  else :                         
    // Если контент не существует, подключить шаблон "No posts found".                                  
    get_template_part( 'content', 'none' );                    
  endif;    
  ?></div><!-- #content -->
</section><!-- #primary -->

<?php  get_sidebar( 'content' ); get_sidebar(); get_footer(); ?>

3. Добавление в шаблон категории пользовательского запроса

Выше основного цикла добавляем пользовательский цикл. После закрытия тега </ h1> вставьте следующий код:

<?php  
// вывод специального изображения для категории  
// определение текущей категории  
$currentcat = get_queried_object(); 
$currentcatname = $currentcat->slug;
?>

Этот код определяет текущую отображаемую категорию с помощью get_queried_object().

Ниже с помощью WP_Query определяются аргументы пользовательского запроса:

<?php    
// определение аргументов запроса для специального изображения    
$args = array(       
    'post_type' => 'attachment',
    'post_status' => 'inherit',
    'category_name' => $currentcatname,
  );
  $query = new WP_Query( $args );
?>

Данный код определяет любые вложения в текущей категории, а также в «featured«. Обратите внимание, что из-за способа, с помощью которого WordPress задает статусы вложений, вам необходимо использовать в качестве аргумента ‘post_status’ => ‘inherit’.

Теперь ниже добавьте цикл:

<?php  
  // Цикл 
while ( $query->have_posts() ) : $query->the_post();
  // определение атрибутов для вывода изображения
  $imgattr = array(
        'alt'   => trim( strip_tags( get_post_meta( $attachment_id, '_wp_attachment_image_alt', true ) ) ),
    );

  ?>
// Вывод изображения
  <div class="category-image"></div>
<?php 
endwhile;  
// сброс запроса для выполнения запроса по умолчанию  
wp_reset_postdata(); ?>

Убедитесь, что вы не пропустили wp_reset_postdata() в конце, иначе основной запрос для архива категории работать не будет.

После этого сохраните шаблон категории и откройте в браузере одну из страниц архивов категории. Она должна выглядеть примерно так, как показано на скриншоте в начале статьи.

Заключение

В этой серии из четырех статей я продемонстрировала несколько методов работы с изображениями в WordPress. К ним относятся:

  • Регистрация таксономии для использования с вложениями;
  • Создание страницы списка документов с помощью пользовательского шаблона;
  • Создание страницы для отображения галереи изображений заданной категории с помощью пользовательского шаблона;
  • Создание «специального изображения» для каждой категории и его вывод на странице архива категории.

Как видите, в WordPress с изображениями и медиафайлами можно сделать гораздо больше, чем просто прикрепить их к записи или использовать в качестве «специального изображения«. Вы можете запросить их так же, как и любые другие типы записей и вывести ссылки на документы или отобразить изображения.

Перевод статьи «Advanced Use of Attachments in WordPress: Creating a ‘Featured Image’ for a Category» был подготовлен дружной командой проекта Сайтостроение от А до Я.