Применение таксономий

Таксономии, появившиеся в 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 из них.

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