Таксономия в 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), напишу в отдельном посте.

для Миха: я у себя поступил просто- каждой записи (у меня это какая-нибудь из работ) добавляю в тег год создания, и потом можно тыцьнув на интересующую цифру получить все созданное за этот год.
>>Не пишите мне на емейл, очень занята, обращайтесь к lecactus.ru по поводу всяких платных доработок в WordPress
Уважаемая Соника, товарищ Кактус сделал один проект, а потом как сквозь землю провалился (почти месяц не выходит на связь). Можете посоветовать кого-нибудь другого? Заранее огромное спасибо.)
ps: написал тут — не нашел обратной связи или еще каких-то контактов. не в хуиз же лезть)
Хорошая и обзорная статья.
Возможно я не совсем по адресу, но вопрос близок к теме. Мне достаточно рубрик, т.е. сама по себе таксономия не нужна, рубрики выводятся в нескольких местах в шаблоне, но в админке wp очень не удобное управление рубриками (имеется ввиду виджет при редактировании поста) если создать рубрики с подрубриками, то при создании новой записи чекбоксы проставить гораздо удобнее, чем метки, но при повторном редактировании дочерние рубрики в виджете сливаются с родительскими и получается каша... Есть ли какие-нибудь хаки, чтобы разбить рубрики вот так:
Может встречали плагины или хаки по этой теме, буду признателен любому ответу.
Денис, думаю можно. Посмотрите как пример любую Тему с настройками из админки, такие Темы русифицированные ищите на wpbot.ru (у него же кстати можно заказать такие настройки для вашей Темы) или погуглите wordpress theme options
Как пример
Mixa, не знаю, может быть через query_posts codex.wordpress.org/Template_Tags/query_posts
Есть ли способ получить записи с опредеденным тегом за кокретный период (год) ?
А можно ли интегрировать таксономию в шаблон, т.е. в админке задавать вывод определенной рубрики без влезания в шаблон, т.е. для простого пользователя админки?
Спасибо за статью, пойду перенастраивать свой вордпрес =)
Подскажите пожалуйста, как сделать чтобы метки в админке не были скрыты под ссылкой «Выбрать из списка меток» , а сразу при написании новости все метки были видны в панели ?
а как с помощью пользовательских таксономий вывести не с одной группы, а с нескольких групп по определенным значениям?
Почти радужно, если не считать того, что ссылки в файлы Темы прийдется вписывать вручную:
Я установила xili-tidy-tags, теперь задача из двух групп меток выбирать посты по двум параметрам. насколько я поняла, теперь нужно прописывать вручную ссылки, но куда, в какие файлы?
Добрый день.
Соника, можешь скинуть мне пароль на mywordpress . ru / support/ ?Там что-то скрипт «забыли пароль» не присылает на почту письмо ((... не могу на форум зайти.
Vlad, спасибо за ссылку, интересный плагин!
Вот появился еще плагин
Комментарий :)
Наконец-то хоть на что-то спромоглись! Давно ждал именно этого функционала, хотя, в данный момент он уже и не нужен мне, так как все решилось заказыванием программинга у Макса (который maxsite) :)
Покопалась сегодня в Pods CMS... примеров мало, документация какая-то скудная. Пока на youtube видео туториал не нашла, не знала с какой стороны подобраться. Может это поверхностный вывод, надо глубже вникнуть. Вордпресс мне при первом знакомстве вообще убогим показался — судила по теме default :)))
Вообще, когда разбирался, мне наиболее интересным с точки зрения функционала показался плагин «»:
Pods is a CMS framework for WordPress. It's a plugin that sits on top of WordPress, allowing you to add and display your own content types.
These content types, or «pods», are totally separate from Posts, Pages, or Custom Fields. The Pods plugin uses its own database structure for maximum efficiency, and for relationships among items.
Но до конца я с ним так и не разобрался.
Владимир, а как группировать-то посты по нескольким ключам и значениям custom field? Можно в get_posts или query_posts задать вывод постов с определенным ключем и значением, но только одним ключем и одним значением. Чтобы сделать выборку по 2 ключам, прийдется еще проверку в цикле делать, вот пример ( в прошлом году мне с ним помог):
<ul> <?php $posts_new = get_posts('meta_key=год&meta_value=2009'); foreach ($posts_new as $post_new) : if (get_post_meta($post_new->ID,'актуально',true) == 'false' ) continue; echo '<li>'; echo '<a href="'; echo get_permalink($post_new->ID); echo '">'; echo $post_new->post_title; echo '</a></li>'; endforeach; ?> </ul>Разве что плагин Custom Field Taxonomies потестить, я на него вчера наткнулась только, вот он, кажется, может помочь фильтровать посты по разным ключам и значениям, судя по ридми.
А не проще для этих целей использовать Custom Fields?
Хотя сам сейчас тоже думаю о сайте-каталоге, где должна присутствовать выборка по массе параметров, и постепенно начинаю более пристально смотреть в сторону Drupal, Joomla и т.д., ибо WP все-таки для этого не очень предназначен.