Как добавить медиафайлам в Вордпресс рубрики и метки?
Рассказываю, как быстро сделать таксономию для медиафайлов в Вордпресс.
Медиа библиотека Вордпресс за время своего существования претерпела массу изменений и различных улучшений. Действительно, система управления медиафайлами в Вордпресс построена на самом высочайшем уровне. Пожалуй, единственный недостаток, с которым вы можете столкнуться — это отсутствие в библиотеке какой-либо таксономии. Для большинства сайтов это совсем не критично. Но если вы регулярно публикуете большое количество медиа материала (фото, видео, аудио и т.п.), вы обязательно зададитесь вопросом: как медиафайлам в медиа библиотеке Вордпресс присвоить рубрики или/и метки.
На этот вопрос есть, как минимум, два ответа. Как обычно, каждый выбирает для себя: плагин или небольшой сниппет. Установка и настройка плагина осуществляется так же просто, как в 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
Подробнее
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’ );