Применяем рубрики, метки и произвольные таксономии к медиа файлам

Вас когда-либо огорчал тот факт, что WordPress не позволяет присваивать рубрики или метки к вашим изображениям и другим загруженным медиа файлам?

Представьте себе, насколько полезным шагом это было бы: вы могли бы создать динамические галереи изображений из отдельных расположений или отдельных типов (ландшафты, абстракции и т.д.), или вы могли бы создать страницы списков для сайтов с большим количеством PDF-вложений.

Прекрасные новости – присвоить рубрики и метки к медиа файлам можно, и достаточно просто. Вы можете присваивать рубрики и метки к вашим вложениям, добавив простой код к файлу functions.php вашей темы; также можете создавать произвольные таксономии, которые будут применяться к вложениям.

В данном руководстве я покажу вам, как это осуществить всего за 10 минут (или даже меньше).

Экран редактирования медиафайлов

В настоящий момент экран редактирования медиа файлов практически пуст, в нем нет никаких рубрик, меток или таксономий:

attachments1

По умолчанию вы не можете выбирать какие-либо существующие метки или рубрики – однако мы поправим это.

Применение рубрик к вложениям

На первом шаге мы подключим рубрики для вложений. Сделать это можно, воспользовавшись функцией register_taxonomy_for_object_type(). В свой файл functions.php темы добавьте следующий код:

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

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

attachments2

Также появился столбец с рубриками на экране редактирования медиа файлов:

attachments3

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

Применение меток к вложениям

Если вы предпочитаете работать с метками вместо рубрик (или, возможно, и с метками, и с рубриками), то в таком случае вы можете использовать ту же самую функцию. Добавьте следующий код в свой файл functions.php темы:

// 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' );

Как и в предыдущем примере, на экране редактирования медиа файлов появится новый раздел – на сей раз с метками:

attachments4

Также появится столбец с метками:

attachments5

Идем дальше – создание произвольной таксономии для вложений

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

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

Сделать это можно с помощью функции register_taxonomy(). Добавьте следующее в свой файл functions.php темы:

// register new taxonomy which applies to attachments
function wptp_add_location_taxonomy() {
    $labels = array(
        'name'              => 'Locations',
        'singular_name'     => 'Location',
        'search_items'      => 'Search Locations',
        'all_items'         => 'All Locations',
        'parent_item'       => 'Parent Location',
        'parent_item_colon' => 'Parent Location:',
        'edit_item'         => 'Edit Location',
        'update_item'       => 'Update Location',
        'add_new_item'      => 'Add New Location',
        'new_item_name'     => 'New Location Name',
        'menu_name'         => 'Location',
    );
 
    $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' );

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

Если вы хотите применить ее к другим типам контента, то в таком случае вы должны заменить параметр attachment в функции register_taxonomy() на массив, содержащий слаги всех типов контента, которые вы хотите добавить. К примеру:

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

Экран редактирования медиа теперь выводит новую таксономию:

attachments6

Поскольку я включил в свой код аргумент show_admin_column, экран медиа библиотеки будет выглядеть так:

attachments7

Готово! Теперь у нас имеются настроенные рубрики, метки и произвольные типы записей, прекрасно работающие с медиа вложениями.

Когда может пригодиться данная техника?

Как вы видели, рубрики и метки можно применять к медиа вложениям, таким как изображения, PDF-файлы, путем использования функции register_taxonomy_for_object_type(). Вы можете также создавать новую таксономию с помощью register_taxonomy() и применять ее к медиа вложениям.

  • Применение таксономий (включая рубрики и метки) к вложениям может использоваться на практике в следующих ситуациях:
  • Создание произвольного шаблона attachment.php для вывода прикрепленных изображений в стиле галерей, используя архивные страницы для вывода изображений из разных рубрик или мест.
  • Создание шаблонов для определенных таксономий или термов с целью вывода вложений по-разному на сайте – к примеру, используя таксономию location, вы можете создать шаблон taxonomy-location-uk.php для вывода архивов изображений из Великобритании, добавив к ним определенную стилизацию.
  • Категоризация PDF вложений на сайте с большим их количеством, а также использование архивных страниц для вывода файлов по теме, разделам, медиа типу и другим факторам, которые требуются вам в вашем проекте.
  • В шаблоне для текущей таксономии вы можете вывести ссылку на все прикрепления с запрошенным термом сразу под списком записей с указанным термом, дополненным прямыми ссылками на прикрепления – вы можете использовать два произвольных запроса в вашем шаблоне.

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

Источник: code.tutsplus.com

Блог про WordPress
Комментарии: 22
  1. Maxim

    Дима, привет! Установил Yet Another Related Posts Plugin для того чтобы показывать похожие страницы медиафайлов (хттп://мусите.ри/glavnaya/attachment/marka-5-size), но почему-то не плагин не работает, хотя игрался с настройками критерии похожести заголовки, тексты, рубрики, метки. И заметил, что у медиафайлов нет меток. Может из-за этого? Если да, то у тебя в статье указано как сделать, но я не понял, где надо править. Добавил вышеуказаные коды в функция.пхп — перестал работать. Версия ВП 4.1. Заранее благодарю за ответ!

    1. Дмитрий (автор)

      YARPP разве работает с медиафайлами?

      «Related posts, pages, and custom post types».

      Про медиафайлы нет ни слова.

  2. Maxim

    В настройках плагина есть выбор: Automatically display related content from YARPP Basic on: Записи, Страницы, Медиафайлы

    1. Дмитрий (автор)

      Он выводит контент (связанные материалы) на страницах медиафайлов. Для каждого медиафайла можно задавать вывод на отдельной странице. Точно так же можно задавать вывод связанных материалов и в RSS фидах.

  3. Maxim

    Дима, хм, очень интересно, что-то в голове логика плагина не срастается. :)Если я правильно понял (ещё не тестил), то: установив похожести для записей и страниц — эти похожести можно вывести на страницу медиафайлов? Если так, то как? :)

    1. Дмитрий (автор)

      Я сам такой вариант вывода не тестировал, но, как я понимаю:
      1. Ставим вывод для медиафайлов: Automatically display related content from YARPP Basic on Mediafiles
      2. Переходим на страницу вложения (Можно через админку: Медиафайлы — Библиотека. Далее наводим курсор на любое изображение и жмем Перейти).
      3. По идее должен появиться список похожих записей под изображением.

  4. Maxim

    Дима, понял, спасибо! Протестирую. Отпишу.

  5. Maxim

    Дима, не работает. Сделал, согласно статье, рубрики и метки для медиафайлов. Плюс сделал рубрики и метки для страниц. Не работает плагин со страницами медафайлов, а вот с страницами — заработал (это хорошо, но нужно именно страницы медиафайлов). Вот думаю, что может по принципу того кода для страниц сделать для медиафайлов, т.е. я к тому, что код в данной статье не совершенен? :) Правда я не знаю php, ни код ВП. Дима, а как тебе скинуть ссылку на статью, где код для страниц. Если тебя не затруднит — глянешь? Хотя можешь просто в гугле набрать «wordpress как добавить метки для страниц» — первая ссылка. Заранее благодарю!

    1. Дмитрий (автор)

      У меня все работает. Поставил на тестовый сайт последнюю версию YARPP, задал вывод для медиафайлов, специально загрузил изображение, перешел на его страницу и вот результат:

  6. Дмитрий (автор)

    Это я открыл страницу вложения. YARPP пишет, что нет похожих записей, поскольку у меня на тестовом сайте нет статей.

  7. Maxim

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

    1. Дмитрий (автор)

      Медиафайлы он не будет выводить в любом случае. Он не распространяется на них. А записи и страницы будет выводить, когда появятся подходящие. Но это уже надо смотреть по его алгоритму, как он определяет схожие записи.

  8. Maxim

    Дима, поигрался я с настройками.
    Как работают похожести: в ВП есть записи, страницы, медиафайлы. Похожесть применяется отдельно, для записей — похожесть записей, для страниц — похожести страниц, для медиафайлов — свои похожести. Т.е. не будет такого, что при создании записи, в самой записи будут применяться похожести записей и/или страниц, будет только похожесть записей. Данная надстройка:
    Automatically display related content from YARPP Basic on Mediafiles
    отвечает только лишь за то: вкл/выкл работу плагина для записи и т.д. или нет. А не за то: выводить похожести записей на страницах, или выводить похожести страниц в записях, или выводить похожести записей и похожести страниц в медиафайлах. :)
    А значит, если есть выбор Медиафайлы, значит плагин должен работать с медиафайлами. :) Но, почему-то не работает.

    1. Дмитрий (автор)

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

  9. Maxim

    Дима, я о том же. Спрашивается зачем есть выбор Медиафайлы. :))) И что самое интересное — интернет молчит, никто об этом не пишет, пытался найти инфу — не нашёл. Я тут задумался, а действительно ли страницы медиафайлов — страницы, может это записи? Может из-за этого не работает. Хотя, я игрался и так и сяк, ничего не получилось. Попробую ещё раз. :)))

  10. Maxim

    Что-то я написал не подумав. Если были записями, то работало, т.к. записи работают. М-да… Загадка… Может код глянуть, что эта галка Медиафайлы делает. Как там говорят: на заборе xyz написано, а там дрова лежат, только здесь наоборот — дрова лежат, но xyz… )))

    1. Дмитрий (автор)

      Думаю да, придется смотреть код плагина. А то нигде нет ни одной инструкции, для чего вообще эта галочка нужна.

  11. Алексей

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

    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 чтобы аттачменты появились наряду с постами?

  12. Александр

    добрый день!
    Я тоже задумался поставить картинки в рубрики, а потом обнаружил что в некоторых рубриках они уже стоят(сайт не так давно обслуживаю) и начал разбираться как же они (картинки) там оказались. плагин стоит «Изображения таксономии» к рубрике добавляются картинки (в консоли) которые я хочу добавить, а те которые добавлены http://prntscr.com/erjn57 они в описании рубрики выведены кодом , я попробовал его вставить в описание той рубрики в которую хочу сам вставить картинку, ничего не выводится. добавил плагин который Вы рекомендуете, тоже ничего. Помогите разобраться))

  13. Ivan

    Добрый день.
    Попробовал добавить таксономию, скопировал Ваш код. Почему то в админке таксономия отображается полем для ввода текста как у меток, а не выбором чекбоксами как у рубрик. Что я делаю не так?

    1. Ivan

      Нашел. Для выбора вида нужно воспользоваться настройкой «meta_box_cb».

      post_categories_meta_box — показывать как категории
      post_tags_meta_box — показывать как метки.
      Если указать false, то метабокс будет отключен вообще.

      1. Дмитрий (автор)

        Отлично. Наша помощь не понадобилась :)

Добавить комментарий для Дмитрий Алёшин Отменить ответ

Получать новые комментарии по электронной почте.