Очередной блог фрилансера

коротко и полезно о веб-разработке

Menu Close

Введение в пользовательскую таксономию WordPress 3.0

В WordPress 3.0 будут восполнены серьезные пробелы, благодаря чему, он станет гораздо более серьезной системой управления контентом. Довольно простая в использовании функция пользовательской таксономии, предоставит разработчикам сайта мощный инструмент для построения хорошей информационной архитектуры. В сегодняшней статье, вы узнаете что собой представляют таксономии, почему они полезны и как их можно использовать.

Что такое Таксономия?

Таксономии – это различные методы для классификации информации. В этой статье приведен пример записей о персональных компьютерах, которые можно классифицировать по целому ряду различных критериев, включая:

  • Количество оперативной памяти
  • Размер жесткого диска
  • Скорость процессора
  • Тип процессора
  • Установленная операционная система
  • и так далее…

Краткая история таксономии WordPress

Рубрики

До версии 2.3, в WordPress был только один тип таксономии для записей, под названием Рубрики. Это было удобно для блогов, а в нашем случае, нам пришлось бы создать рубрику верхнего уровня под названием “Персональные компьютеры”, затем дочернюю рубрику “Оперативная память”, которая, в свою очередь, может содержать такие дочерние рубрики как “Меньше 1Гб”, “1Гб”, “2Гб”, “4Гб” и так далее. Вторая дочерняя рубрика, от основной рубрики “Персональные компьютеры”, называлась бы “Операционная система” и содержала бы такие дочерние рубрики, как: “Windows XP”, “Mac OS”, “Red Hat”, “Ubuntu” и т.д.

Система, позволяющая иметь рубрики, состоящие из дочерних рубрик – называется иерархической структурой. До версии WordPress 2.3, создать серьезную информационную архитектуру сайта можно было только путем создания большой иерархии рубрик, в которой рубрики верхнего уровня представляли собой большие группы таксономий.

Метки

Начиная с версии 2.3, в WordPress был добавлен второй вид таксономии под названием Метки. В отличие от рубрик, которые придумываются заранее, в зависимости от типа контента на сайте, метки предоставляют более свободный метод классификации контента.

Например, при создании записи о персональном компьютере, метки позволяют автору указать одно или несколько ключевых слов, таких как “игровой”, “шумный”, “офисный” и т.д. Эти ключевые слова конечно не несут такого смысла как рубрики, однако помогают добавить дополнительную классификацию к записи.

Посетители сайта, в дальнейшем, легко смогут найти все записи с меткой “шумный”. Однако, свободная форма меток, не поможет нам построить надежную классификационную систему на основе заранее известных значений, таких как типы операционной системы или процессора. Кроме того, метки являются одномерными, и не поддерживают иерархическую структуру.

Одноуровневые пользовательские таксономии

Начиная с версии 2.8, в WordPress появляется возможность добавить пользовательские классификационные схемы, путем незначительных изменений в коде сайта. С помощью этой функции, вы можете построить список операционных систем, отдельно от списка типов оперативной памяти и т.д. Однако,  в версии 2.8 нет возможности создать иерархическую стркутуру таксономии, как у рубрик.

Иерархические пользовательские таксономии

И наконец, WordPress 3.0, дает нам полностью иерархические пользовательские таксономии. Обратите внимание как иерархическое устройство позволяет упростить таксономию операционных систем, путем группировки всех вариантов операционной системы Windows в общей родительской рубрике “Windows”. Такая классификация позволит пользователям просматривать все компьютеры с ОС Windows, или например конкретные, с Windows XP.

Создание пользовательской Таксономии

Редактирование файла functions.php

В WordPress 3.0 нет возможности создавать пользовательские таксономии в панели управления. Для начального описания вашей пользовательской таксономии без использования плагина, вам понадобится добавить немного кода в файл functions.php, расположенный в папке с вашей темой. Это совсем не сложно – просто следуйте приведенным примерам.

Добавляем Таксономии в коде

Итак, на примере персонального компьютера, мы добавим отдельные таксономии для Оперативной памяти, Жесткого диска и Операционной системы. На данном этапе, мы просто добавим таксономии сами по себе, как пустые контейнеры. К счастью, мы можем добавлять и управлять различными классификациями, не выходя из панели управления.

Шаг 1. Первая функция для создания всего

Для начала, нам нужно создать функцию, которая создает все необходимые нам таксономии. Назовем функцию “build_taxonomies”. Давайте добавим эту функцию в конец файла functions.php.

function build_taxonomies() {  
    // code will go here  
}  

Шаг 2. Описание Таксономий

Далее, для каждой таксономии, которую мы создадим, нам нужно взывать определенную WordPress-функцию, с правильными параметрами. Далее представлена эта функция, и разъяснены ее важные параметры.

register_taxonomy(  
    'internal_name',  
    'object_type',  
    array(  
        'hierarchical' => {true|false},  
        'label' => 'Human Readable Name',  
        'query_var' => {true|false},  
        'rewrite' => {true|false}  
    )  
);  
  • internal_name: название таксономии, которое будет использоваться в базе данных и файлах шаблона
  • object_type: определяет типы контента, к которым можно будет применить эту таксономию. Возможные значения: “post” (запись), “page” (страница), “link” (ссылка).
  • Далее идет массив из опциональных параметров. В этой статье, мы будем использовать наиболее важные из них, а полный список можно найти в кодексе WordPress, на странице описания функции register_taxonomy. Далее идет список используемых параметров.
  • hierarchical: если значение установлено в “true”, эта таксономия будет иметь возможности иерархической структуры, как у Рубрик. Если значение “false”, то таксономия по структуре будет похожа на Метки.
  • label:  это читаемое название, которое будет использоваться в интерфейсе сайта для обозначения этой таксономии.
  • query_var: если значение параметра установлено в “true”, мы сможем получать записи, на основе выбранного значения этой таксономии. Например, можно найти все записи, для которых в таксономии “операционная система” указано значение “Windows”.
  • rewrite: если значение установлено в “true”, при просмотре страницы с этой таксономией, WordPress будет использовать дружественные URL. Например, страница, отображающая все записи с операционной системой “Windows”, будет представлена следующим url: http://domain.com/operating_system/windows

Код, добавляющий таксономию “Операционная система” выглядит следующим образом:

register_taxonomy( 'operating_system', 'post', array( 'hierarchical' => true, 'label' => 'Operating System', 'query_var' => true, 'rewrite' => true ) );  

Вставьте эту функцию, внутри ранее созданной функции build_taxonomies.

Шаг 3 Вызов функции, создающей таксономию

Для того, чтобы наша функция build_taxonomies была выполнена, нам понадобится добавить одну строчку кода, в файле functions.php. Фактически мы “прицепим” функцию build_taxonomies к событию init, путем добавления следующего кода:

add_action( 'init', 'build_taxonomies', 0 ); 

Вы можете вставить эту строчку в любом месте, в нашем примере она добавлена выше вызова функции build_taxonomies, поэтому код выглядит вот так:

// Custom Taxonomy Code  
add_action( 'init', 'build_taxonomies', 0 );  
  
function build_taxonomies() {  
    register_taxonomy( 'operating_system', 'post', array( 'hierarchical' => true, 'label' => 'Operating System', 'query_var' => true, 'rewrite' => true ) );  
}  

Добавляем классификацию к новой Таксономии

Если вы правильно добавили таксономию “Операционная система” в файле functions.php, она должна появится в виде нового пункта, в блоке “Записи”, вашей панели управления. Кликните по нему, чтобы добавить необходимые классификации.

Теперь, вы можете добавлять и редактировать операционные системы, точно таким же образом, как Рубрики.

Добавляем больше Таксономий

Оставшиеся таксономии добавляем аналогичным способом, то есть для каждой таксономии в файле functions.php, создается своя функция register_taxonomy:

register_taxonomy( 'ram', 'post', array( 'hierarchical' => true, 'label' => 'RAM', 'query_var' => true, 'rewrite' => true ) );
  
register_taxonomy( 'hard_drive', 'post', array( 'hierarchical' => true, 'label' => 'Hard Drive', 'query_var' => true, 'rewrite' => true ) );

После того, как вы добавите все таксономии, код должен выглядеть следующим образом:

// Custom Taxonomy Code  
add_action( 'init', 'build_taxonomies', 0 );  
  
function build_taxonomies() {  
register_taxonomy( 'operating_system', 'post', array( 'hierarchical' => true, 'label' => 'Operating System', 'query_var' => true, 'rewrite' => true ) );  
register_taxonomy( 'ram', 'post', array( 'hierarchical' => true, 'label' => 'RAM', 'query_var' => true, 'rewrite' => true ) );  
register_taxonomy( 'hard_drive', 'post', array( 'hierarchical' => true, 'label' => 'Hard Drive', 'query_var' => true, 'rewrite' => true ) );  
}  

Создание записи, с использованием новой Таксономии

Создайте несколько записей, указав необходимую классификацию, в окне создания/редактирования записей, вы увидите панели вашей таксономии.

Отображение различной таксономии записей

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

Для этого, нам понадобится немного изменить цикл, в определенных файлах шаблона.

Вывод таксономии на индивидуальной странице

В дефолтной теме Twenty Ten, как и во многих других темах WordPress, данные о рубрике и метках записи, выводятся непосредственно под текстом этой записи. Мы будем выводить нашу таксономию, если она существует, чуть выше блока рубрик с метками.

Шаг 1. Редактирование файла single.php

Шаблон индивидуальной записи называется single.php, и расположен он внутри папки с вашей темой. Если такого шаблона у вас нет, его можно создать, и скопировать в него содержимое файла index.php.

Найдите в шаблоне single.php строчку:

<div class="entry-utility"> 

В теме Twenty Ten, этот блок содержит название рубрик, метки, ссылки  и другую информацию о текущей записи. Код для вывода нашей таксономии, мы будем размещать непосредственно над этим блоком.

Шаг 2. Получение таксономии для текущей записи

Здесь мы определяем несколько переменных, для хранения вывода пользовательской таксономии.

<?php  
// Эта переменная используется для вывода таксономии, если она существует
$taxo_text = "";  
  
// Список переменных, для хранения списков таксономии
// Эта строка получает данные о классификации "Операционная система"
$os_list = get_the_term_list( $post->ID, 'operating_system', '<strong>Operating System(s):</strong> ', ', ', '' );  

Для получения информации о таксономии текущей записи, мы используем функцию get_the_term, со следующими параметрами:

  • $post->ID : id текущей записи
  • ‘operation_system’ : имя пользовательской таксономии. Мы проверяем, была ли назначена текущей записи, какая-либо классификация из пользовательской таксономии operation_system.
  • ‘Операционная система (ы)’ : если данные будут найдены, эта строчка будет вставлена, перед их выводом на экран.
  • ‘, ’ :  если найденных значений будет несколько, то они будут разделены запятой
  • : если данные будут найдены, эта строка будет вставлена после вывода данных. В нашем случае, мы оставляем ее пустой.

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

$ram_list = get_the_term_list( $post->ID, 'ram', '<strong>RAM Option(s):</strong> ', ', ', '' );  
$hd_list = get_the_term_list( $post->ID, 'hard_drive', '<strong>Hard Drive Option(s):</strong> ', ', ', '' );  

Шаг 3. Форматирование полученного результата

Проверяем результаты для каждой из трех возможных таксономий. Если результат есть, добавляем его к нашему выводу, вместе с тэгом перевода строки.

// Добавляем список ОС, если они указаны
if ( '' != $os_list ) {  
    $taxo_text .= "$os_list<br />\n";  
}  
// Добавляем данные об Оперативной памяти, если они указаны
if ( '' != $ram_list ) {  
    $taxo_text .= "$ram_list<br />\n";  
}  
// Добавляем данные о жестком диске, если они указаны
if ( '' != $hd_list ) {  
    $taxo_text .= "$hd_list<br />\n";  
}  

Шаг 4. Выводим классификацию, если она найдена

Проверяем, была ли получена таксономия из предыдущих шагов. Если таксономия существует, выводим ее, предварительно обернув в div с классом “entry-utility”.

// Выводим пользовательскую таксономию, если она существует 
// Обратите внимание: Мы не будет открывать div, если у него не будет содержимого
if ( '' != $taxo_text ) {  
?>  
<div class="entry-utility">  
<?php  
echo $taxo_text;  
?>  
</div>  
<?  
} // endif  
?>  

Шаг 5. Проверяем результаты

Теперь, если открыть страницу любой записи, вы должны увидеть пользовательскую классификацию, расположенную сразу после текста записи.

Просмотр списка записей, построенный на основе пользовательской таксономии

Теперь, на странице индивидуальной записи, мы можем узнать к какой классификации принадлежит текущая запись. Вы, наверное, заметили, что при отображении пользовательской классификации, термины выводятся в виде ссылки, которая должна вести на страницу с записями, принадлежащими к этой классификации. К примеру, кликнув по ссылке “Mac OS”, мы по идее, должны увидеть страницу со списком записей, с классификацией “Mac OS”.

Однако, ничего такого не происходит. Для того, чтобы у нас выводилась такая страница, нам нужно создать специальный шаблонный файл, с именем taxonomy.php. WordPress пытается грузить этот шаблон (если он существует) каждый раз, при просмотре записей, группированных пользовательской таксономией.

Шаг 1

Откройте файл category.php, скопируйте его контент, и вставьте в новый файл, сохранив его под именем “taxonomy.php”.

Шаг 2 Получение информации о текущей классификации

В файле taxonomy.php, нам необходимо получить информацию о текущей, просматриваемой таксономии. Скорее всего, нам понадобится название и описание (если есть) для выбранной классификации.

Сразу после строки <?php get_header(); ?> следующую строку:

$term = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) ); 

Эта строка получает всю информацию о таксономии и возвращает ее в виде объекта, записанного в переменную $term. Например, классификация “Mac OS” возвращает следующий объект:

stdClass Object  
(  
    [term_id] => 13  
    [name] => Mac OS  
    [slug] => mac-os  
    [term_group] => 0  
    [term_taxonomy_id] => 22  
    [taxonomy] => operating_system  
    [description] =>  
    [parent] => 0  
    [count] => 2  
)  

Шаг 3 Вывод Названия классификации и ее описание

Нам нужно изменить название страницы, чтобы пользователи видели, какая классификация отображена на странице. Поскольку мы скопировали содержимое шаблона category.php, мы можем взять строку кода, использующуюся для вывода названия рубрики, и немного ее изменить, с тем, чтобы она отображала текущее название классификации, и (если доступно) ее описание.

Измените следующую строку, взятую из шаблона category.php

printf( __( 'Category Archives: %s', 'twentyten' ), '<span>' . single_cat_title( '', false ) . '</span>' );  

следующим образом:

printf( __( 'Posts classified under: %s', 'twentyten' ), '<span>' . $term->name . '</span>' );  

Эта строка выведет название текущей классификации. Далее, ниже добавьте следующую строчку:

if ('' != $term_descr ) {  
echo "<p>$term_descr</p>\n";  
}  

Здесь, как не трудно догадаться, будет выведено описание классификации, если оно доступно.

Проверить как работает классификационный список записей, очень просто. Откройте любую, отдельную запись, и кликните на ссылку-название классификации.

Перевод статьи “Introducing WordPress 3 Custom Taxonomies”, автор Paul Kaiser