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

5 мая 2015 1 989 11

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

Новые лендинги

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

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

1. Плагин Enhanced Media Library

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

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

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

2. Сниппет


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

Сниппеты традиционно добавляются в файл 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' );

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

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

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

Подпишитесь на мой телеграм и первыми получайте новые материалы, в том числе которых нет на сайте.

INNERSTAT
Лучшее за неделю

Подпишитесь на рассылку и получайте новые материалы на электронную почту

Иван Данилин

Практикующий веб-разработчик, специализируюсь на платформе Вордпресс.

Комментарии
  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’ );
Добавить комментарий

Премиум-темы для Вордпресс с русскоговорящей поддержкой
Подробнее