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

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

5 мая 2015 690 11

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

ThemeForest: Лучшие темы интернет-магазинов для WordPress
ThemeForest: Лучшие темы интернет-магазинов для 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 с мощнейшим функционалом. Но это далеко не всегда целесообразно и очень редко оправдывает средства.

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

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

Комментарии
  • alvarvas

    Здравствуйте, прописал Ваш код:

    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’);

      • alvarvas

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

      • alvarvas

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

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

        • Пардон, немного не то.
          Попробуйте такой вариант:

          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’ );

          • alvarvas

            Прекрасно!
            Все работает, спасибо!

          • alvarvas

            вот только теперь все медиафайлы появились в разделе «Записи» в админке. Это нормально?
            И поиск по постам и по страницам не работает, вордпресс выдает «неверный тип записи»

          • ограничьте ф-ю архивами и главной, например

            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’ );

            с поиском и фильтрами проблем не наблюдаю.

          • alvarvas

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

          • Konstantin Talanov

            При добавлении этого кода пропадает меню.

          • Konstantin Talanov

            Чтоб меню не исчезало его тоже нужно передать. Может кому понадобится:
            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’ );

Разгоните свой WordPress

Хостинг-провайдер номер один в России — REG.RU

Подробнее