Таксономия в WordPress 2.8 и альтернативы
[ ←Вернуться к стандартному виду ]
Сначала просто хотела перевести статью про Custom Taxonomies, но почитав и опробовав, слегка разочаровалась. Добавить свою таксономию в WordPress 2.8 оказалось очень легко, но наворотить посредством кастомных таксономий что-либо сложное не получается, т.к. основная задача у меня на данный момент — создать сайт, записи которого можно группировать и так и сяк, не только по меткам и рубрикам.
Предположим, у нас есть записи (посты), которым присваивается несколько признаков, например:
- Цвет (зеленый, красный, голубой и т.д.)
- Размер (маленький, большой, средний)
- Форма (треугольник, квадрат, овал и т.д.)
Задача: без излишних «некрасивых» телодвижений выводить записи с разными признаками:
- все посты с признаками зеленый + квадрат
- все посты с признаками голубой + квадрат + большой размер
- все посты с признаками зеленый +средний размер
- и т.п.
Используем метки (теги)
Все это довольно легко организовать с помощью меток (тегов), но не очень удобно при написании записи и выводе постов: метки в записи заполняются «сплошным» вводом в бокс «Метки» без всякой разбивки по группам (признакам): зеленый, большой размер, треугольник. А если вы используете метки для чего-то ещё, то получается каша-мала. А посты можно выводит таким образом:
при включенном ЧПУ, где zelenyi, kvadrat — это слаги соответствующих меток:
http://site.ru/tag/zelenyi+kvadrat/— все посты, в которых есть обе метки: зеленый и квадрат
http://site.ru/tag/zelenyi,kvadrat/— все посты, в которых хотя бы одна метка: зеленый или квадрат
при ЧПУ по-умолчанию урлы будут такими:
http://site.ru/?tag=zelenyi+kvadrat— все посты, в которых есть обе метки: зеленый и квадрат
http://site.ru/?tag=zelenyi,kvadrat— все посты, в которых хотя бы одна метка: зеленый или квадрат
Почти радужно, если не считать того, что ссылки в файлы Темы прийдется вписывать вручную:
<a href="http://site.ru/?tag=zelenyi+kvadrat">Зеленые квадраты</a>
А вот если используются еще и рубрики, то вывести все посты «Зеленые квадраты», принадлежащие определенной рубрике не получится. Был для этого плагин TDO Tag Fixed (совместимость заявлена до 2.5, на 2.8.х я его не пробовала).
Используем метки + плагин xili-tidy-tags
Схема такая же, как и описанная выше + мы имеем возможность вывести несколько облаков меток, сгуппированных по признакам.
Т.е задача плагина xili-tidy-tags — помочь сгруппировать метки в группы. Плагин позволяет вывести виджетом облако меткок определенной группы меток или двух определенных групп. Группы меток можно «вкладывать» одну в другую (глубина, правда, всего 1 уровень: parent & child). Неудобство в том, что каждую метку нужно привязать к группе вручную.
Что получилось:
Кстати, хороший способ разделить метки на группы «русские» и «английские» для мультиязычных блогов, xili-tidy-tags хорошо совместим с плагином xili-language, подробности тут (англ.)
Есть шоткоды, котоыми можно вывести облако группы меток прямо в пост:
[xili-tidy-tags params="tagsgroup=color&largest=10&smallest=10" glue=" | "]
или так (без виджета):
<?php if (function_exists('xili_tidy_tag_cloud'))
xili_tidy_tag_cloud('tagsgroup='.single_cat_title('',false).'&tagsallgroup=color&largest=18');
?>
Пользовательские таксономии
В статье Custom Taxonomies in WordPress 2.8 рассматривается процесс создания таксономии без плагина. Отличный подробный туториал с картинками. К сожалению, таксономия получается слишком «простой» :( Ни тебе иерархии, ни группировки записей по нескольким терминам. Зато в админ. панели все красиво:

custom taxonomies
Для создания такой таксономии добавляем в functions.php (в папке Темы):
add_action( 'init', 'create_my_taxonomies', 0 );
function create_my_taxonomies() {
register_taxonomy( 'color', 'post', array( 'hierarchical' => false, 'label' => 'Цвет', 'query_var' => true, 'rewrite' => true ) );
register_taxonomy( 'size', 'post', array( 'hierarchical' => false, 'label' => 'Размер', 'query_var' => true, 'rewrite' => true ) );
register_taxonomy( 'forma', 'post', array( 'hierarchical' => false, 'label' => 'Форма', 'query_var' => true, 'rewrite' => true ) );
}
Для использования такой таксономии нужно включить ЧПУ (шаблон любой), если ЧПУ у вас по умолчанию, то заменить в приведенном выше коде 'rewrite' => trueна 'rewrite' => false
Ссылки на посты с термином Цвет » зеленый :http://site.ru/color/zelenyi/
Ссылки на посты с термином Размер » большой :http://site.ru/size/bolshoi/
Слаги (короткие ссылки) терминов можно редактировать таким же образом, как и обычные метки. Но лучше сразу поставить плагин rus-to-lat, чтобы слаги транслитировались при создании термина.
Что нам все это дает?
Вывод в записи терминов (цвета), которыми помечена запись:
<?php echo get_the_term_list( $post->ID, 'color', 'Цвета: ', ', ', '' ); ?>
выводим облако с о списком форм:
<?php wp_tag_cloud( array( 'taxonomy' => 'size', 'number' => 45 ) ); ?>
Выводим записи с «зеленым» цветом:
<?php query_posts( array( 'color' => 'zelenyi', 'showposts' => 10 ) ); ?>
Создаем специальный шаблон taxonomy.phpкоторый будет использован ВордПрессом при просмотре термина (например по ссылке http://site.ru/color/zelenyi/)
Отображение названия термина: <?php $term = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) ); echo $term->name; ?>
Показываем описание термина: <?php echo term_description( '', get_query_var( 'taxonomy' ) ); ?>
Чтобы в описании термина можно было использовать форматирование functions.php Темы дописываем:
remove_filter( 'pre_term_description', 'wp_filter_kses' );
Скудно, но для определенных целей пригодится, например автор статьи «Custom Taxonomies in WordPress 2.8» приводит в пример сайт с обзором фильмов, активно использующего пользовательскую таксономию: http://popcritics.com/movies/. А тут довольно подробно рассматривается процесс создания этого сайта: «Using custom taxonomies to create a movie database».
Для нелюбящих копаться в коде есть плагин Simple Taxonomies.
Вспомогательный плагин GD Taxonomies Tools
Плагин отображает все имеющиеся у вас таксономии, добавляет урлы таксономий в /xml карту сайта (должен быть установлен плагин XML Sitemap Generator), удаляет термины если таксономия удалена (настраивается), а также позволяет использовать виджеты, с помощью которых выводятся термины из всех типов таксономий, на выбор: пользовательские (созданные вами), рубрики, метки и рубрики ссылок.

Виджет gdTT Terms Cloud

виджет gdtt terms cloud
Остается ждать, когда же custom taxonomies станут hierarchical и/или их можно будет «скрещивать» :(
Нашла ещё интересный способ группировки записей с использованием custom fields (плагин Custom Field Taxonomies), напишу в отдельном посте.

ещё нужен совет, как изменить порядок страниц?
Здравствуйте, подскажите пож. почему не работают теги?
Подскажите, пожалуйста, почему теги ставятся но не работают, и в записях не отображается картинка, когда редактируешь ее видно, а при опубликовании ее нет, спасибо.
А как вообще заставить теги созданной таксономии работать? У меня они выводятся, но не работают, а файла tags.php в шаблоне нет вообще...
Дополнение к предыдущему комментарию (можете оба удалить, так как проблема решилась) — удалось вывести посты через query_posts с добавлением query_string в аргументы — по сути получилось всё тоже самое, но почему-то по-другому не работает.
Здравствуйте, София!
За несколько лет существования этой статьи многократно она меня выручала (за что огромное вам спасибо!), однако сейчас столкнулась с совершенно мистическим на мой взгляд глюком:
WP 3.2, GD Taxonomies Tools
на сайте есть 2 пользовательских типа постов и 2 иерархических пользовательских таксономии. За каждым типом постов закреплена своя таксономия.
Первые (созданные раньше) тип и таксономия ведут себя адекватно, а вот вторые (и все последующие) не желают выводиться через query_posts или get_posts, при том что параметр Query Variable стоит в них как true.
т.е. на странице таксономии записи выводятся стандартным лупом, а при добавлении query_posts или get_posts выводится перестают — мне же необходимо вывести их с возможностью сортировки «на лету» () — здесь работает, а здесь выводится без query (