DIW#3. Категории и теги WordPress

21.03.2012

post-Category-Tags

Сегодняшняя статья посвящена категориям и тегам WordPress. Как работает базовый механизм, встроенный в движок? Как добавить собственные критерии отбора постов? Как с ними работать в дальнейшем? Обо всем этом в этой статье. 

Базовый механизм категорий и тегов

Категории и теги (или таксономия, если быть точным) — основной механизм организации и сортировки записей в WordPress.

Таксономия — древообразная структура классификаций объектов. Говоря проще, список характеристик, которые присущи объекту.

По умолчанию, движок поставляется с одной записью «Привет, мир!», которая принадлежит к категории «Без рубрики» или «Uncategorized». Ее можно изменить (я обычно так и делаю), а можно создать свой список категорий, удалив начальную.

Как удалить категорию по умолчанию и назначить свою?

Делается это очень просто: идем в Параметры ->Написание и меняем параметр «Основная рубрика»

Изменение основной рубрики записей

Изменение основной рубрики записей

После этого станет возможным удаление категории по умолчанию.

Раньше WordPress не позволял группе записей добавить(или удалить) категорию. Теперь это возможно. В списке записей нужно выделить те, которым необходимо присвоить категорию и выбрать «Изменить». В открывшейся панели редактирования можно присвоить группе записей не только категорию, но и любой другой параметр (теги, автора и прочие)

Групповое редактирование записей

Групповое редактирование записей

Любой записи кроме категории можно присвоить теги. Это, своего рода, более детальная сортировка записей. Допустим, если вы ведете блог о веб-разработке и пишете статью о хорошем плагине — тогда WordPress будет категорией, а плагин будет тегом. Также, присвоив записи тег, можно указать, что статья для новичков или что она о PHP.

Не забывайте, что в первую очередь все это делается для облегчения навигации по сайту. Ведь у вас будет очень много записей, не так ли?
В админ-панели категории записи выбираются чекбоксами, а теги — из облака тегов или пишутся вручную. Структура ссылок у них также очень похожа:

  • http://site.com/category/wordpress/
  • http://site.com/tag/php/

Да и в шаблоне они используют одну страницу на двоих, обычно это archive.php. Функционально, категории и теги взаимозаменяемы и для пользователя отличаются минимально. Но, есть некоторые негласные правила, которые рекомендуется соблюдать при ведении блога.

Одно из важных различий между категориями и тегами — категорию можно легко исключить из цикла вывода записей на странице:

query_posts('cat=-3'); 

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

Используйте только одну категорию

Рекомендуется использовать для каждой записи только одну категорию и вот почему это действительно нужно делать:

  • Более логичная навигация для посетителя. Найдя одинаковую запись в нескольких категориях — он не будет уверен, одинаковы ли они по содержанию.
  • Присваивая несколько категорий, вы тем самым «дублируете» контент. Поисковым системам это очень не нравится.

Используйте несколько тегов

Теги — замечательная штука, на самом деле. Допустим, вы написали обзор гитары фирмы ibanez, которая выпускается с 1969 года. Отлично, присваиваем ей категорию «Обзоры» и теги «1969»  «Ibanez» и «гитара».  Затем вы написали пост об альбоме Led Zeppelin 1969 года и опять присвоили ему тег с номером года. Путем некоторых телодвижений создаем навигацию по годам и БАЦ! Посетитель, зайдя почитать про гитару с очень высокой вероятностью почитает и про Led Zeppelin.

Таким образом, опираясь на теги, можно построить замечательные навигационные «цепочки». Стоит только подойти к этому с фантазией.

Не стоит забывать, однако, такой момент — рекомендуется использовать не более 100 ссылок на странице. Если больше — стоит закрыть их от индексации.

Также стоит помнить — категоризация не обязательна. Если структура вашего сайта такова, что категории и теги вам не нужны — просто не используйте их.

Создание собственной таксономии

Помните, я говорил, что категории и теги — почти одно и тоже. Так и есть — это две разные таксономии. Причем, WordPress позволяет вам создавать свои собственные классификации, для более гибкого управления записями.

Рассмотрим такой случай — у вас есть блог, на котором вы пишете обзоры фильмов. Они делятся по годам, жанрам, актерам, режиссерам и другим параметрам. Очевидно, что категорий и тегов просто не хватит для создания идеальной навигации по сайту. Тут на помощь приходит механизм создания собственной таксономии.

Давайте посмотрим на примере, как это можно реализовать. Рассмотрим фильм «Сонная лощина»

  • Название записи: Обзор фильма «Сонная лощина»
  • Категория: Обзор
  • Теги: Вашингтон Ирвинг, Нью-Йорк, Готика
  • Актеры: Джонни Депп, Кристина Риччи
  • Продюсер: Скотт Рудин, Адам Шрёдер
  • Режиссер: Тим Бартон
  • Жанр: Хоррор, Мистика

Идея состоит в том, что вы можете подключить эти дополнительные поля также просто, как это происходит с тегами. Для этого в файл functions.php нужно добавить такой код:


function create_my_taxonomies() {
register_taxonomy('actors', 'post', array(
'hierarchical' => false, 'label' => 'Actors',
'query_var' => true, 'rewrite' => true));

register_taxonomy('producers', 'post', array(
'hierarchical' => false, 'label' => 'Producers',
'query_var' => true, 'rewrite' => true));
}

add_action('init', 'create_my_taxonomies', 0);
Таксономия

Таксономия

Остальные значения добавляются аналогично, проблем никаких.

После вставки этого кода — в редакторе записей появятся еще два окна, аналогичные тегам, в которых можно добавить свои значения актеров и продюсеров. Обратите внимание, что кроме этого, вместе с новой таксономией, будут созданы и новые адреса, в которых вместо category и tag будут значения actor и producer. 

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

Но, мало добавить таксономию, нужно как то выводить ее на экран для посетителя. Это немного сложнее работы с тегами, но ничего страшного нет.

Выводим таксономию в виде «облака тегов»

<?php wp_tag_cloud(array('taxonomy' => 'actors', 'number' => 5)); ?>

Вставляется код или в виджет плагина, который умеет выполнять PHP код, либо непосредственно в шаблон. Этот код выведет 5 значений таксономии «Актеры», если заменить 5 на 0 — выведет все содержимое.

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

<?php query_posts(array('actors' => 'will-smith', 'showposts' => 10)); ?>

Этот запрос выведет 10 записей о фильмах с Уиллом Смитом. Использовать этот код можно только перед основным циклом вывода записей на странице. Более детально о циклах вывода поговорим в следующих статьях.

Вывод всех значений конкретной таксономии для записи

<?php echo get_the_term_list($post->ID, 'actors', 'Актеры: ', ', ', ''); ?>

Этот код покажет все значения, присвоенные данной записи в пределах таксономии «Актеры». То есть, выведет список актеров, которые снимались в фильме.

Теперь, когда вы научились работать с собственной таксономией WordPress — можно бежать создавать собственный IMDb или Кинопоиск с блэк-джеком и … стоп, это уже из другой оперы. А на сегодня на этом все — в следующей статье цикла поговорим о пользователях блога и выборе идеального шаблона.

Удачного дня

,

Комментариев: 23

  1. Aziz

    Здравствуйте вы не могли бы мне помочь у моего сайта есть одна проблема когда добавляешь категорию объявление все категории показывает и категории и подкатегории.Я хочу чтобы по порядку всё было.Когда нажал категорию появился подкатегории вот так я хочу помогите мне буду рад.
    Жду вашего ответа

    Ответить
  2. Олег

    Спасибо за статью!
    Такая проблема:
    После Создания собственной таксономии, Заголовок H1 на всех страницах тегов — одинаковый. Как сделать чтобы заголовок был «Название тега»?

    Ответить
  3. Никита

    У меня есть сайт на WordPress. Каждой новой записи я могу присваивать определённую категорию (ии) и тэг (и).
    Любая категория появляется по адресу: мойсайт.рф/category/NAME1/; соответственно любая запись в категории NAME по адресу мойсайт. рф/category/NAME1/post/. С тэгами тоже самое, только вместо мойсайт.рф/category/ будет мойсайт.рф/tag/. Тэг NAME2, будет по адресу мойсайт.рф/tag/NAME2/, а запись мойсайт.рф/tag/NAME2/post/.
    Когда я выберу категорию NAME1 (мойсайт.рф/category/NAME1/) или тэг NAME2 (мойсайт.рф/tag/) , будут показаны все записи из этой категории или с этим тэгом во всём сайте.
    Мне нужно сделать так, чтобы на странице показались не все записи из категории NAME1, а только записи, которые будут только с тэгом NAME2, или группой тэгов.
    Например, у меня есть категория Страны. В ней будут подкатегории: Россия, Англия, Германия, Египет. В них я буду писать о городах, заповедниках и достопримечательностях. Чтобы не создавать для каждой подкатегории ещё подкатегории, причём одинаковые, я создаю тэги.
    Напишу статью о Москве, Твери, Бородинском поле и Лондоне. Они будут находится в подгатегориях Россия и Англия и иметь тэги Города и Достопримечательности.
    Я хочу посмотреть российские города. Если я выберу адрес мойсайт.рф/category/Russia/, мне будут показаны записи Москва, Тверь и Бородинское поле. А если мойсайт.рф/tag/City/, мне будут показаны Москва, Тверь и Лондон.
    Собственно вопрос: какой мне нужно написать код, установить плагин, или вбить запрос в адресную строку, чтобы были показаны записи из категории Russia и тэгом City, то есть только Москва и Тверь.

    Ответить
    • praestes

      Не работает вывод всех записей при клике по выбранной таксономии, выдает страницу 404… В остальном всё работает.

      Ответить
  4. анна

    Добрый день. Вы не знаете случайно как реализовать автоматическое присвоение элемента кастомной таксономии для пользовательских типов постов. Нужен механизм такой как у стандартных постов — если автор поста не указал категорию, то при сохранении поста ему автоматом проставляется uncategorized. Буду очень признательна за помощь.

    Ответить
  5. Mur Borracho

    Выдает ошибку
    Parse error: syntax error, unexpected ‘}’ in /themes/Divi/functions.php on line 2185

    Почему ругается на закрывающуюся скобку
    ‘query_var’ => true, ‘rewrite’ => true));
    }

    Ответить
  6. Mur Borracho

    Отличная статья! Никак не могу найти, как выводить записи помеченные определенной категорией и определенными тегами

    Ответить
  7. Ясен

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

    Ответить
  8. Вероника Машукова

    Здравствуйте. Я начинающая блогерша, помогите пожалуйста в решении одной проблемы.
    Когда я добавляю новую запись там есть окошко «Добавить метки». Они отлично добавляются и в разделе «Все записи» тоже отображаются. Но вот на самом блоге около статьи не выводятся, ни в анонсе ни в полной статье.
    Я думаю это что-то с шаблоном, но уже голову почти сломала пытаясь найти решение в интернете. (
    Помогите пожалуйста. Как это сделать? (

    Ответить
    • GerinG

      Да, это связано с шаблоном.
      Вывод можно сделать примерно так:

       <?php the_tags('Теги:', ', ', '<br />'); ?> 
      Ответить
  9. Эльвира

    Наконец-то я познакомилась и с этим термином — таксономия. Очень важная для меня статья — давно «плюхалась» в этих непонятных для меня категориях и тегах, не могла понять что же все-таки важнее, что сделать категорией, а что меткой. А ответ был совсем рядом — на вашем блоге. Вот теперь потренируюсь на добавлении своей таксономии! Спасибо.

    Ответить
  10. GerinG

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

    Ответить
  11. Андрей Розальев

    У меня челюсть об пол сбрякала, когда прочитал про возможность задания собственной таксономии! Спасибо огромное! Добавил страницу в закладки.

    Ответить
  12. akkad

    Создание собственной таксономии — это вещь! Спасибо, не знал, что такое возможно.

    Ответить
  13. Webliberty

    Я вот не использую теги, практически с самого начала. А к постам могу присвоить и несколько категорий, если они под них попадают, почему бы и нет? При этом категории у меня закрыты от индексации, так что никакого дублирования)

    Ответить
    • Виктор Милашечкин

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

      Ответить
      • Webliberty

        Да у меня с самого начала так, уже привык) А к тегам у меня почему-то отторжение, и на других блогах ими не пользуюсь, даже не знаю почему)

        Ответить
        • Виктор Милашечкин

          Ну тут да, дело привычки конечно. Я сам не всегда использую, но если грамотно организовано — приятно покнопать, даже для души )) )

          Ответить