Как добавить медиафайлам в Вордпресс рубрики и метки?

Опубликовано 9 лет назад

Рассказываю, как быстро сделать таксономию для медиафайлов в Вордпресс.

Медиа библиотека Вордпресс за время своего существования претерпела массу изменений и различных улучшений. Действительно, система управления медиафайлами в Вордпресс построена на самом высочайшем уровне. Пожалуй, единственный недостаток, с которым вы можете столкнуться — это отсутствие в библиотеке какой-либо таксономии. Для большинства сайтов это совсем не критично. Но если вы регулярно публикуете большое количество медиа материала (фото, видео, аудио и т.п.), вы обязательно зададитесь вопросом: как медиафайлам в медиа библиотеке Вордпресс присвоить рубрики или/и метки.

На этот вопрос есть, как минимум, два ответа. Как обычно, каждый выбирает для себя: плагин или небольшой сниппет. Установка и настройка плагина осуществляется так же просто, как в woocommerce оплата картой, например.

Плагин Enhanced Media Library

Плагин Enhanced Media Library устанавливается и активизируется стандартным образом. После его активизации, вы увидите в разделе Медиафайлы некоторые изменения. А именно новый пункт Media Categories. А в самой Библиотеке вы увидите новый выпадающий список рубрик ваших медиафайлов. Разумеется, сначала их нужно создать. Делается это самым стандартным способом в разделе Media Categories. Речь о котором шла чуть выше.

Естественно, плагин в отличие от того же сниппета даст вам более широкие возможности управления и каталогизации медиа-вложений. Например, функции пакетной обработки. Что при большом количестве материала будет весьма полезно. Кроме этого, в настройках плагина вы можете ввести для медиафайлов метки, кастомную таксономию, новые MIME-типы документов и т.д.

Кроме всего прочего, в Enhanced Media Library заявлена полная совместимость с некоторым другими популярными плагинами. Такими как: Advanced Custom Fields (ACF), WooCommerce, Meta Slider и Search & Filter.

Сниппет

Второй способ подключения рубрик и меток для медиафайлов в Вордпресс не сложнее первого. Но требует от пользователя уже более глубоких знаний. Так как придется добавить несколько строк в код темы.

Сниппеты традиционно добавляются в файл functions.php вашей активной темы или в функциональный плагин. Тогда при смене темы ваш функционал не пропадет.

Рубрики

// Добавляем рубрики
 
function wptp_add_categories_to_attachments() {
  register_taxonomy_for_object_type( 'category', 'attachment' );
}
 
add_action( 'init' , 'wptp_add_categories_to_attachments' );

Метки

// Добавляем метки
 
function wptp_add_tags_to_attachments() {
  register_taxonomy_for_object_type( 'post_tag', 'attachment' );
}
 
add_action( 'init' , 'wptp_add_tags_to_attachments' );

Кастомная таксономия

Например, «Места» (Locations).

// Вводим новую таксономию «Места» для медиафайлов
 
function wptp_add_location_taxonomy() {
 
  $labels = array(
    'name' => 'Места',
    'singular_name' => 'Location',
    'search_items' => 'Поиск мест',
    'all_items' => 'Все места',
    'parent_item' => 'Родительское место',
    'parent_item_colon' => 'Родительское место:',
    'edit_item' => 'Редактировать место',
    'update_item' => 'Обновить место',
    'add_new_item' => 'Добавить новое место',
    'new_item_name' => 'Имя нового места',
    'menu_name' => 'Места',
  );

  $args = array(
   'labels' => $labels,
   'hierarchical' => true,
   'query_var' => 'true',
   'rewrite' => 'true',
   'show_admin_column' => 'true',
  );

  register_taxonomy( 'location', 'attachment', $args );

}

add_action( 'init', 'wptp_add_location_taxonomy' );

Добавив все три сниппета, результат будет примерно следующим.

Как видим, возможности Вордпресс в части медиа-контента ограничиваются лишь нашим воображением.

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

Иван Данилин
Автор Иван Данилин

Фулстек веб‑разработчик, специализируюсь на платформе WordPress

Подробнее
Комментарии
  1. Здравствуйте, прописал Ваш код:

    function wptp_add_categories_to_attachments() {
    register_taxonomy_for_object_type( ‘category’, ‘attachment’ );
    }
    add_action( ‘init’ , ‘wptp_add_categories_to_attachments’ );

    // apply tags to attachments
    function wptp_add_tags_to_attachments() {
    register_taxonomy_for_object_type( ‘post_tag’, ‘attachment’ );
    }
    add_action( ‘init’ , ‘wptp_add_tags_to_attachments’ );

    в файле functions.php

    в медиафайлах появилсь рубрики и метки. Но беда в том, что на страницах самих рубрик и меток не выводятся ссылки на медиафайлы.

    Какой код дописать в archive.php чтобы аттачменты появились наряду с постами?
    • Доброй ночи! Я думаю, проще поправить основной цикл.
      Допишите в functions.php такой код:

      function ext_query() {
      global $wp_query;
      $wp_query->query_vars[‘post_type’] = array( ‘attachment’ );
      $wp_query->query_vars[‘post_status’] = array( null );
      return $wp_query;
      }

      add_action(‘parse_query’, ‘ext_query’);
      • Спасибо, Иван!
        Вложения появились. НО! пропали ссылки на посты.
        А надо, чтобы в архиве (рубрике, метке) были вместе и посты и вложения.
        Что не так сделал?
      • Спасибо, Иван!
        Вложения появились. НО! пропали ссылки на посты.
        А надо, чтобы в архиве (рубрике, метке) были вместе и посты и вложения.
        Что не так сделал?

        Забавно также то, что на страницах меток и рубрик, которые не присвоены
        ни одному аттачменту, исчезло вообще все: и посты и описания. Я для
        пробы добавил медиафайл в рубрику, появилось описание и этот медиафайл, а
        посты не появились.
        Где-то косяк…
        • Пардон, немного не то.
          Попробуйте такой вариант:

          function ext_query( $query ) {
          $query->set( ‘post_type’, array( ‘post’, ‘attachment’ ) );
          $query->set( ‘post_status’, array( ‘publish’, ‘inherit’ ) );
          return $query;
          }
          add_filter( ‘pre_get_posts’, ‘ext_query’ );
          • вот только теперь все медиафайлы появились в разделе «Записи» в админке. Это нормально?
            И поиск по постам и по страницам не работает, вордпресс выдает «неверный тип записи»
          • ограничьте ф-ю архивами и главной, например

            function ext_query( $query ) {
            if(is_home() || is_archive()) {
            $query->set( ‘post_type’, array( ‘post’, ‘attachment’ ) );
            $query->set( ‘post_status’, array( ‘publish’, ‘inherit’ ) );
            return $query;
            }
            }
            add_filter( ‘pre_get_posts’, ‘ext_query’ );

            с поиском и фильтрами проблем не наблюдаю.
          • забавно. работает. в админке вроде порядок, поиск и фильтры заработали. Теперь на главной и на страницах архивов исчезли горизонтальные меню.
          • Чтоб меню не исчезало его тоже нужно передать. Может кому понадобится:
            function ext_query( $query ) {
            if(is_home() || is_archive()) {
            $query->set( ‘post_type’, array(‘post’, ‘nav_menu_item’, ‘attachment’));
            $query->set( ‘post_status’, array( ‘publish’, ‘inherit’ ) );
            return $query;
            }
            }
            add_filter( ‘pre_get_posts’, ‘ext_query’ );
Добавить комментарий