<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Очередной блог фрилансера &#187; taxonomy</title>
	<atom:link href="http://dreamhelg.ru/tag/taxonomy/feed/" rel="self" type="application/rss+xml" />
	<link>http://dreamhelg.ru</link>
	<description>о моей работе в сети и не только</description>
	<lastBuildDate>Fri, 23 Dec 2011 07:10:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Введение в пользовательскую таксономию WordPress 3.0</title>
		<link>http://dreamhelg.ru/2010/05/intorducing-into-custom-taxonomy-wordpress-3-0/</link>
		<comments>http://dreamhelg.ru/2010/05/intorducing-into-custom-taxonomy-wordpress-3-0/#comments</comments>
		<pubDate>Fri, 14 May 2010 07:00:17 +0000</pubDate>
		<dc:creator>dreamhelg</dc:creator>
				<category><![CDATA[wordpress]]></category>
		<category><![CDATA[переводы]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[taxonomy]]></category>

		<guid isPermaLink="false">http://dreamhelg.ru/?p=2008</guid>
		<description><![CDATA[<p><img width="200" height="200" src="http://dreamhelg.ru/wp-content/uploads/2010/05/200x200.jpg" class="attachment-200x200 wp-post-image" alt="200x200" title="200x200" /></p>В WordPress 3.0 будут восполнены серьезные пробелы, благодаря чему, он станет гораздо более серьезной системой управления контентом. Довольно простая в использовании функция пользовательской таксономии, предоставит разработчикам сайта мощный инструмент для построения хорошей информационной архитектуры. В сегодняшней статье, вы узнаете что собой представляют таксономии, почему они полезны и как их можно использовать.<span id="more-2008"></span>
<h3>Что такое Таксономия?</h3>
Таксономии – это различные методы для классификации информации. В этой статье приведен пример записей о персональных компьютерах, которые можно классифицировать по целому ряду различных критериев, включая:
<ul>
	<li>Количество оперативной памяти</li>
	<li>Размер жесткого диска</li>
	<li>Скорость процессора</li>
	<li>Тип процессора</li>
	<li>Установленная операционная система</li>
	<li>и так далее…</li>
</ul>
<h3>Краткая история таксономии WordPress</h3>
<h4>Рубрики</h4>
<a href="http://dreamhelg.ru/wp-content/uploads/2010/05/category_old.png"><img class="aligncenter size-full wp-image-2012" title="category_old" src="http://dreamhelg.ru/wp-content/uploads/2010/05/category_old.png" alt="" width="295" height="315" /></a>

До версии 2.3, в WordPress был только один тип таксономии для записей, под названием <strong>Рубрики</strong>. Это было удобно для блогов, а в нашем случае, нам пришлось бы создать рубрику верхнего уровня под названием “Персональные компьютеры”, затем дочернюю рубрику “Оперативная память”, которая, в свою очередь, может содержать такие дочерние рубрики как “Меньше 1Гб”, “1Гб”, “2Гб”, “4Гб” и так далее. Вторая дочерняя рубрика, от основной рубрики “Персональные компьютеры”, называлась бы “Операционная система” и содержала бы такие дочерние рубрики, как: “Windows XP”, “Mac OS”, “Red Hat”, “Ubuntu” и т.д.

Система, позволяющая иметь рубрики, состоящие из дочерних рубрик – называется иерархической структурой. До версии WordPress 2.3, создать серьезную информационную архитектуру сайта можно было только путем создания большой иерархии рубрик, в которой рубрики верхнего уровня представляли собой большие группы таксономий.
<h4>Метки</h4>
<a href="http://dreamhelg.ru/wp-content/uploads/2010/05/tags.png"><img class="aligncenter size-full wp-image-2013" title="tags" src="http://dreamhelg.ru/wp-content/uploads/2010/05/tags.png" alt="" width="287" height="178" /></a>

Начиная с версии 2.3, в WordPress был добавлен второй вид таксономии под названием <strong>Метки</strong>. В отличие от рубрик, которые придумываются заранее, в зависимости от типа контента на сайте, метки предоставляют более свободный метод классификации контента.

Например, при создании записи о персональном компьютере, метки позволяют автору указать одно или несколько ключевых слов, таких как “игровой”, “шумный”, “офисный” и т.д. Эти ключевые слова конечно не несут такого смысла как рубрики, однако помогают добавить дополнительную классификацию к записи.

Посетители сайта, в дальнейшем, легко смогут найти все записи с меткой “шумный”. Однако, свободная форма меток, не поможет нам построить надежную классификационную систему на основе заранее известных значений, таких как типы операционной системы или процессора. Кроме того, метки являются одномерными, и не поддерживают иерархическую структуру.
<h3>Одноуровневые пользовательские таксономии</h3>
<a href="http://dreamhelg.ru/wp-content/uploads/2010/05/04-custom-tax-1d.png"><img class="aligncenter size-full wp-image-2014" title="04-custom-tax-1d" src="http://dreamhelg.ru/wp-content/uploads/2010/05/04-custom-tax-1d.png" alt="" width="494" height="462" /></a>

Начиная с версии 2.8, в WordPress появляется возможность добавить пользовательские классификационные схемы, путем незначительных изменений в коде сайта. С помощью этой функции, вы можете построить список операционных систем, отдельно от списка типов оперативной памяти и т.д. Однако,  в версии 2.8 нет возможности создать иерархическую стркутуру таксономии, как у рубрик.
<h3>Иерархические пользовательские таксономии</h3>
<a href="http://dreamhelg.ru/wp-content/uploads/2010/05/05-custom-tax-2d.png"><img class="aligncenter size-full wp-image-2015" title="05-custom-tax-2d" src="http://dreamhelg.ru/wp-content/uploads/2010/05/05-custom-tax-2d.png" alt="" width="292" height="242" /></a>

И наконец, WordPress 3.0, дает нам полностью иерархические пользовательские таксономии. Обратите внимание как иерархическое устройство позволяет упростить таксономию операционных систем, путем группировки всех вариантов операционной системы Windows в общей родительской рубрике “Windows”. Такая классификация позволит пользователям просматривать все компьютеры с ОС Windows, или например конкретные, с Windows XP.
<h3>Создание пользовательской Таксономии</h3>
<strong>Редактирование файла functions.php</strong>

В Wordpress 3.0 нет возможности создавать пользовательские таксономии в панели управления. Для начального описания вашей пользовательской таксономии без использования плагина, вам понадобится добавить немного кода в файл functions.php, расположенный в папке с вашей темой. Это совсем не сложно – просто следуйте приведенным примерам.
<h3>Добавляем Таксономии в коде</h3>
Итак, на примере персонального компьютера, мы добавим отдельные таксономии для Оперативной памяти, Жесткого диска и Операционной системы. На данном этапе, мы просто добавим таксономии сами по себе, как пустые контейнеры. К счастью, мы можем добавлять и управлять различными классификациями, не выходя из панели управления.

<strong>Шаг 1. Первая функция для создания всего</strong>

Для начала, нам нужно создать функцию, которая создает все необходимые нам таксономии. Назовем функцию “build_taxonomies”. Давайте добавим эту функцию в конец файла functions.php.

[php]
function build_taxonomies() {  
    // code will go here  
}  
[/php]

<strong>Шаг 2. Описание Таксономий</strong>

Далее, для каждой таксономии, которую мы создадим, нам нужно взывать определенную WordPress-функцию, с правильными параметрами. Далее представлена эта функция, и разъяснены ее важные параметры.

[php]
register_taxonomy(  
    'internal_name',  
    'object_type',  
    array(  
        'hierarchical' =&gt; {true|false},  
        'label' =&gt; 'Human Readable Name',  
        'query_var' =&gt; {true|false},  
        'rewrite' =&gt; {true|false}  
    )  
);  
[/php]

<ul>
	<li><strong>internal_name:</strong> название таксономии, которое будет использоваться в базе данных и файлах шаблона</li>
	<li><strong>object_type:</strong> определяет типы контента, к которым можно будет применить эту таксономию. Возможные значения: “post” (запись), “page” (страница), “link” (ссылка).</li>
	<li>Далее идет массив из опциональных параметров. В этой статье, мы будем использовать наиболее важные из них, а полный список можно найти в кодексе WordPress, на странице описания функции <a href="http://codex.wordpress.org/Function_Reference/register_taxonomy">register_taxonomy</a>. Далее идет список используемых параметров.</li>
	<li><strong>hierarchical</strong>: если значение установлено в “true”, эта таксономия будет иметь возможности иерархической структуры, как у Рубрик. Если значение “false”, то таксономия по структуре будет похожа на Метки.</li>
	<li><strong>label</strong>:  это читаемое название, которое будет использоваться в интерфейсе сайта для обозначения этой таксономии.</li>
	<li><strong>query_var</strong>: если значение параметра установлено в “true”, мы сможем получать записи, на основе выбранного значения этой таксономии. Например, можно найти все записи, для которых в таксономии “операционная система” указано значение “Windows”.</li>
	<li><strong>rewrite</strong>: если значение установлено в “true”, при просмотре страницы с этой таксономией, WordPress будет использовать дружественные URL. Например, страница, отображающая все записи с операционной системой “Windows”, будет представлена следующим url: http://domain.com/operating_system/windows</li>
</ul>
Код, добавляющий таксономию “Операционная система” выглядит следующим образом:

[php]
register_taxonomy( 'operating_system', 'post', array( 'hierarchical' =&gt; true, 'label' =&gt; 'Operating System', 'query_var' =&gt; true, 'rewrite' =&gt; true ) );  
[/php]

Вставьте эту функцию, внутри ранее созданной функции build_taxonomies.

<strong>Шаг 3 Вызов функции, создающей таксономию</strong>

Для того, чтобы наша функция build_taxonomies была выполнена, нам понадобится добавить одну строчку кода, в файле functions.php. Фактически мы “прицепим” функцию build_taxonomies к событию init, путем добавления следующего кода:

[php]
add_action( 'init', 'build_taxonomies', 0 ); 
[/php]

Вы можете вставить эту строчку в любом месте, в нашем примере она добавлена выше вызова функции build_taxonomies, поэтому код выглядит вот так:

[php]
// Custom Taxonomy Code  
add_action( 'init', 'build_taxonomies', 0 );  
  
function build_taxonomies() {  
    register_taxonomy( 'operating_system', 'post', array( 'hierarchical' =&gt; true, 'label' =&gt; 'Operating System', 'query_var' =&gt; true, 'rewrite' =&gt; true ) );  
}  
[/php]

<h3>Добавляем классификацию к новой Таксономии</h3>
<a href="http://dreamhelg.ru/wp-content/uploads/2010/05/os.png"><img class="aligncenter size-full wp-image-2016" title="os" src="http://dreamhelg.ru/wp-content/uploads/2010/05/os.png" alt="" width="155" height="166" /></a>

Если вы правильно добавили таксономию “Операционная система” в файле functions.php, она должна появится в виде нового пункта, в блоке “Записи”, вашей панели управления. Кликните по нему, чтобы добавить необходимые классификации.

<a href="http://dreamhelg.ru/wp-content/uploads/2010/05/os-category.jpg"><img class="aligncenter size-full wp-image-2017" title="os-category" src="http://dreamhelg.ru/wp-content/uploads/2010/05/os-category.jpg" alt="" width="618" height="425" /></a>

Теперь, вы можете добавлять и редактировать операционные системы, точно таким же образом, как Рубрики.
<h3>Добавляем больше Таксономий</h3>
Оставшиеся таксономии добавляем аналогичным способом, то есть для каждой таксономии в файле functions.php, создается своя функция register_taxonomy:

[php]
register_taxonomy( 'ram', 'post', array( 'hierarchical' =&gt; true, 'label' =&gt; 'RAM', 'query_var' =&gt; true, 'rewrite' =&gt; true ) );
  
register_taxonomy( 'hard_drive', 'post', array( 'hierarchical' =&gt; true, 'label' =&gt; 'Hard Drive', 'query_var' =&gt; true, 'rewrite' =&gt; true ) );
[/php]

После того, как вы добавите все таксономии, код должен выглядеть следующим образом:

[php]
// Custom Taxonomy Code  
add_action( 'init', 'build_taxonomies', 0 );  
  
function build_taxonomies() {  
register_taxonomy( 'operating_system', 'post', array( 'hierarchical' =&gt; true, 'label' =&gt; 'Operating System', 'query_var' =&gt; true, 'rewrite' =&gt; true ) );  
register_taxonomy( 'ram', 'post', array( 'hierarchical' =&gt; true, 'label' =&gt; 'RAM', 'query_var' =&gt; true, 'rewrite' =&gt; true ) );  
register_taxonomy( 'hard_drive', 'post', array( 'hierarchical' =&gt; true, 'label' =&gt; 'Hard Drive', 'query_var' =&gt; true, 'rewrite' =&gt; true ) );  
}  
[/php]

<h3>Создание записи, с использованием новой Таксономии</h3>
<a href="http://dreamhelg.ru/wp-content/uploads/2010/05/publish_post.jpg"><img class="aligncenter size-full wp-image-2018" title="publish_post" src="http://dreamhelg.ru/wp-content/uploads/2010/05/publish_post.jpg" alt="" width="636" height="476" /></a>

Создайте несколько записей, указав необходимую классификацию, в окне создания/редактирования записей, вы увидите панели вашей таксономии.
<h3>Отображение различной таксономии записей</h3>
Пока что ничего, из того что мы сделали, не доступно посетителям сайта. Следовательно, нам необходимо отобразить для каждой записи, название пользовательской таксономии, к которой она принадлежит.

Для этого, нам понадобится немного изменить цикл, в определенных файлах шаблона.
<h3>Вывод таксономии на индивидуальной странице</h3>
В дефолтной теме <em>Twenty Ten</em><em>, </em>как и во многих других темах WordPress, данные о рубрике и метках записи, выводятся непосредственно под текстом этой записи. Мы будем выводить нашу таксономию, если она существует, чуть выше блока рубрик с метками.

<a href="http://dreamhelg.ru/wp-content/uploads/2010/05/taxonomy.jpg"><img class="aligncenter size-full wp-image-2019" title="taxonomy" src="http://dreamhelg.ru/wp-content/uploads/2010/05/taxonomy.jpg" alt="" width="702" height="262" /></a>

<strong>Шаг 1. Редактирование файла single.php</strong>

Шаблон индивидуальной записи называется single.php, и расположен он внутри папки с вашей темой. Если такого шаблона у вас нет, его можно создать, и скопировать в него содержимое файла index.php.

Найдите в шаблоне single.php строчку:

[html]
&lt;div class=&quot;entry-utility&quot;&gt; 
[/html]

В теме Twenty Ten, этот блок содержит название рубрик, метки, ссылки  и другую информацию о текущей записи. Код для вывода нашей таксономии, мы будем размещать непосредственно над этим блоком.

<strong>Шаг 2. Получение таксономии для текущей записи</strong>

Здесь мы определяем несколько переменных, для хранения вывода пользовательской таксономии.

[php]
&lt;?php  
// Эта переменная используется для вывода таксономии, если она существует
$taxo_text = &quot;&quot;;  
  
// Список переменных, для хранения списков таксономии
// Эта строка получает данные о классификации &quot;Операционная система&quot;
$os_list = get_the_term_list( $post-&gt;ID, 'operating_system', '&lt;strong&gt;Operating System(s):&lt;/strong&gt; ', ', ', '' );  
[/php]

Для получения информации о таксономии текущей записи, мы используем функцию get_the_term, со следующими параметрами:
<ul>
	<li><strong>$post-&gt;ID</strong> : id текущей записи</li>
	<li><strong>‘operation_system’</strong> : имя пользовательской таксономии. Мы проверяем, была ли назначена текущей записи, какая-либо классификация из пользовательской таксономии operation_system.</li>
	<li><strong>‘Операционная система (ы)’</strong> : если данные будут найдены, эта строчка будет вставлена, перед их выводом на экран.</li>
	<li><strong>‘, ’ </strong>:  если найденных значений будет несколько, то они будут разделены запятой</li>
	<li><strong>“ </strong>: если данные будут найдены, эта строка будет вставлена после вывода данных. В нашем случае, мы оставляем ее пустой.</li>
</ul>
Точно так же, используя эту функцию для двух других таксономий, мы получим код следующего вида:

[php]
$ram_list = get_the_term_list( $post-&gt;ID, 'ram', '&lt;strong&gt;RAM Option(s):&lt;/strong&gt; ', ', ', '' );  
$hd_list = get_the_term_list( $post-&gt;ID, 'hard_drive', '&lt;strong&gt;Hard Drive Option(s):&lt;/strong&gt; ', ', ', '' );  
[/php]

<strong>Шаг 3. Форматирование полученного результата</strong>

Проверяем результаты для каждой из трех возможных таксономий. Если результат есть, добавляем его к нашему выводу, вместе с тэгом перевода строки.

[php]
// Добавляем список ОС, если они указаны
if ( '' != $os_list ) {  
    $taxo_text .= &quot;$os_list&lt;br /&gt;\n&quot;;  
}  
// Добавляем данные об Оперативной памяти, если они указаны
if ( '' != $ram_list ) {  
    $taxo_text .= &quot;$ram_list&lt;br /&gt;\n&quot;;  
}  
// Добавляем данные о жестком диске, если они указаны
if ( '' != $hd_list ) {  
    $taxo_text .= &quot;$hd_list&lt;br /&gt;\n&quot;;  
}  
[/php]

<strong>Шаг 4. Выводим классификацию, если она найдена</strong>

Проверяем, была ли получена таксономия из предыдущих шагов. Если таксономия существует, выводим ее, предварительно обернув в div с классом “entry-utility”.

[php]
// Выводим пользовательскую таксономию, если она существует 
// Обратите внимание: Мы не будет открывать div, если у него не будет содержимого
if ( '' != $taxo_text ) {  
?&gt;  
&lt;div class=&quot;entry-utility&quot;&gt;  
&lt;?php  
echo $taxo_text;  
?&gt;  
&lt;/div&gt;  
&lt;?  
} // endif  
?&gt;  
[/php]

<strong>Шаг 5. Проверяем результаты</strong>

Теперь, если открыть страницу любой записи, вы должны увидеть пользовательскую классификацию, расположенную сразу после текста записи.

<a href="http://dreamhelg.ru/wp-content/uploads/2010/05/taxonomy_2.jpg"><img class="aligncenter size-full wp-image-2020" title="taxonomy_2" src="http://dreamhelg.ru/wp-content/uploads/2010/05/taxonomy_2.jpg" alt="" width="659" height="277" /></a>

<h3>Просмотр списка записей, построенный на основе пользовательской таксономии</h3>
Теперь, на странице индивидуальной записи, мы можем узнать к какой классификации принадлежит текущая запись. Вы, наверное, заметили, что при отображении пользовательской классификации, термины выводятся в виде ссылки, которая должна вести на страницу с записями, принадлежащими к этой классификации. К примеру, кликнув по ссылке “Mac OS”, мы по идее, должны увидеть страницу со списком записей, с классификацией “Mac OS”.

Однако, ничего такого не происходит. Для того, чтобы у нас выводилась такая страница, нам нужно создать специальный шаблонный файл, с именем taxonomy.php. WordPress пытается грузить этот шаблон (если он существует) каждый раз, при просмотре записей, группированных пользовательской таксономией.

<strong>Шаг 1</strong>

Откройте файл category.php, скопируйте его контент, и вставьте в новый файл, сохранив его под именем “taxonomy.php”.

<strong>Шаг 2 Получение информации о текущей классификации</strong>

В файле taxonomy.php, нам необходимо получить информацию о текущей, просматриваемой таксономии. Скорее всего, нам понадобится название и описание (если есть) для выбранной классификации.

Сразу после строки &lt;?php get_header(); ?&gt; следующую строку:

[php]
$term = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) ); 
[/php]

Эта строка получает всю информацию о таксономии и возвращает ее в виде объекта, записанного в переменную $term. Например, классификация “Mac OS” возвращает следующий объект:

[php]
stdClass Object  
(  
    [term_id] =&gt; 13  
    [name] =&gt; Mac OS  
    [slug] =&gt; mac-os  
    [term_group] =&gt; 0  
    [term_taxonomy_id] =&gt; 22  
    [taxonomy] =&gt; operating_system  
    [description] =&gt;  
    [parent] =&gt; 0  
    [count] =&gt; 2  
)  
[/php]

<strong>Шаг 3 Вывод Названия классификации и ее описание</strong>

Нам нужно изменить название страницы, чтобы пользователи видели, какая классификация отображена на странице. Поскольку мы скопировали содержимое шаблона category.php, мы можем взять строку кода, использующуюся для вывода названия рубрики, и немного ее изменить, с тем, чтобы она отображала текущее название классификации, и (если доступно) ее описание.

Измените следующую строку, взятую из шаблона category.php

[php]
printf( __( 'Category Archives: %s', 'twentyten' ), '&lt;span&gt;' . single_cat_title( '', false ) . '&lt;/span&gt;' );  
[/php]

следующим образом:

[php]
printf( __( 'Posts classified under: %s', 'twentyten' ), '&lt;span&gt;' . $term-&gt;name . '&lt;/span&gt;' );  
[/php]

Эта строка выведет название текущей классификации. Далее, ниже добавьте следующую строчку:

[php]
if ('' != $term_descr ) {  
echo &quot;&lt;p&gt;$term_descr&lt;/p&gt;\n&quot;;  
}  
[/php]

Здесь, как не трудно догадаться, будет выведено описание классификации, если оно доступно.

<a href="http://dreamhelg.ru/wp-content/uploads/2010/05/final.jpg"><img class="aligncenter size-full wp-image-2021" title="final" src="http://dreamhelg.ru/wp-content/uploads/2010/05/final.jpg" alt="" width="649" height="563" /></a>

Проверить как работает классификационный список записей, очень просто. Откройте любую, отдельную запись, и кликните на ссылку-название классификации.

Перевод статьи “<a href="http://net.tutsplus.com/tutorials/wordpress/introducing-wordpress-3-custom-taxonomies/">Introducing WordPress 3 Custom Taxonomies</a>”, автор <strong>Paul Kaiser</strong>]]></description>
		<wfw:commentRss>http://dreamhelg.ru/2010/05/intorducing-into-custom-taxonomy-wordpress-3-0/feed/</wfw:commentRss>
		<slash:comments>29</slash:comments>
		</item>
	</channel>
</rss>

