Таксономии, появившиеся в WordPress 2.8, позволяют создавать собственные версиирубрик и меток. Это означает, что вы можете обладать, к примеру, несколькими наборами меток, что серьезным образом влияет на процесс разработки.
С помощью таксономий можно получить более обстоятельный контроль над размечиванием и рубрикацией записей. По умолчанию в панели администратора WordPress имеется две таксономии – одна под названием Рубрики, а вторая под названием Метки. Если вас не устраивает сложившийся порядок, можно воспользоваться таксономиями и создать, к примеру, несколько разделов, обладающих своими собственными наборами меток.
Естественно, в WordPress предусмотрен шаблон для таксономий, называемый taxonomy.php. Шаблоны taxonomy-X.php не поддерживаются. Если вы хотите выполнить обработку какой-либо конкретной метки таксономии, вам понадобится написать отдельный PHP-сниппет.
Допустим, вы хотите создать сайт, посвященный видеоиграм. Основное ваше внимание сосредоточено на трех видах консолей – Xbox 360, PlayStation 3 и Wii. Вы решили, что на сайте должно быть три рубрики – новости, обзоры и превью.
Игры могут быть разработаны как для нескольких платформ одновременно, так и только для одной. К примеру, игры из серии Super Mario могут быть запущены только на Nintendo платформе (к которой относится Wii). Регулярная разметка в данном случае не подойдет, поскольку одна и та же игра может быть выпущена сразу на нескольких платформах. Решим данную проблему с помощью таксономий.
1. При помощи таксономий создадим разметку для каждой из имеющихся игровых платформ: Xbox 360, PlayStation 3 и Wii. В данном случае, к каждой из платформ будет привязана собственная разметка, позволяющая в дальнейшем выводить независимые облака тегов. Следовательно, какую-либо из игр можно будет разместить в качестве метки сразу в нескольких таксономиях, избежав загромождения.
Собственные таксономии создаются в файле functions.php. Для нашего примера код будет выглядеть следующим образом:
add_action( 'init', 'videogames', 0 );
function videogames() {
register_taxonomy( 'xbox360', 'post', array( 'hierarchical' => false, 'label' => 'Xbox 360', 'query_
var' => true, 'rewrite' => true ) );
register_taxonomy( 'playstation3', 'post', array( 'hierarchical' => false, 'label' => 'PlaySta-
tion 3', 'query_var' => true, 'rewrite' => true ) );
register_taxonomy( 'wii', 'post', array( 'hierarchical' => false, 'label' => 'Wii', 'query_var' => true,
'rewrite' => true ) );
}
В первой строке производится инициализация функции videogames. Далее следует сама функция, определяющая новые таксономии. Рассмотрим одну из них, к примеру, для Xbox 360:
register_taxonomy( 'xbox360', 'post', array( 'hierarchical' => false, 'label' => 'Xbox 360', 'query_var'
=> true, 'rewrite' => true ) );
Первый параметр определяет название таксономии, второй – тип контента (сейчас WordPress поддерживает пока только таксономии для записей, однако весьма возможно, что в дальнейшем будет введена поддержка также для ссылок и страниц). Далее следует массив, в котором определяется параметр hierarchical. В данном случае он установлен в false, что означает, что поведение таксономии будет похоже на поведение меток. Если бы он был установлен в true, поведение таксономии стало бы аналогично поведению рубрик, однако в нашем примере этого не требуется (к слову говоря, оно не работало в WordPress 2.8). Следующий параметр, устанавливаемый в массиве, – label, – определяет название метки. Далее идет переменная Query_var, которой передается значение true, в результате чего она возвращает название таксономии (первый параметр). Эта переменная чаще всего используется вместе с Wp_tag_cloud (). Вместо true можно установить любое другое значение. Наконец, последний параметр, rewrite, определяет, нужно ли создавать постоянную ссылку на основе URL таксономии. Иными словами, если у вас имеется метка The Super Game в таксономии Xbox 360, то вы получите или ссылку по умолчанию domain.com/?xbox360=the-super-game, или постоянную ссылку domain.com/xbox360/the-super-game, которая выглядит более симпатично.
2. Теперь, когда таксономии заданы, можно начать работу с ними. Чтобы получить список меток или ссылок для отдельной записи, достаточно использовать функцию get_the_term_list (), которая выполняет те же самые действия, что и тэг шаблона the_tags (). Задается она следующим образом:
<?php echo get_the_term_list( $post->ID, 'xbox360', 'Xbox 360 games: ', ', ', '' ); ?>
Первый параметр функции get_the_term_list () – это ID записи, к которой будет применяться таксономия. Далее следует название таксономии и текст, который будет выведен непосредственно перед списком.
С помощью the_terms () можно выполнять схожие действия, однако с одним отличием – метки не будут являться ссылками.
3. Теперь выведем облако тегов для таксономии xbox360, в котором будет представлено 25 меток (являющихся играми в нашем примере):
<?php wp_tag_cloud( array( 'taxonomy' => 'xbox360', 'number' => 25 ) ); ?>
В массиве передаются параметры taxonomy и number. Первый из них определяет имя таксономии, а второй – количество меток в облаке тегов.
4. Имеется возможность поместить таксономию в цикл. Делается это при помощи query_posts () :
<?php query_posts( array( 'xbox360' => 'the-super-game', 'showposts' => 25 ) ); ?>
Здесь мы запрашиваем записи, помеченные the-super-game в таксономии xbox360, и затем выводим 25 из них.
Мы получили таксономию меток, которую можно использовать для указания названий игр. Таким образом, мы смогли избавиться от беспорядка, возникающего в результате применения регулярных меток. Таксономии позволяют отсортировать и упорядочить метки.