Таксономии

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

Начну с того, что таксономии нужны для группировки постов.

Каким образом? Ну возьмём к примеру хэштеги в инстаграм — когда вы постите фото и присваиваете ему теги — это как раз и есть та самая группировка, о которой я говорю. По умолчанию WordPress тоже поддерживает теги для постов, а ещё рубрики. И их можно объединить одним словом — таксономии.

В WP есть стандартные таксономии, а также те, которые разработчики и пользователи создают сами.

1. Стандартные таксономии в WordPress

Рубрики и метки

Что-то мне подсказывает, что если вы читаете этот пост, то вы уже представляете, что такое рубрики (категории) и метки (теги), что у рубрик есть иерархия, у меток нет и так далее.

рубрики и метки в WP

А теперь мне нужно донести одну важную мысль.

В WordPress есть своя группа функций для работы с рубриками и отдельная группа функций для работы с метками. Наверняка с какими-то из них вы уже знакомы.

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

Рубрики ссылок

Если рубрики и метки в WordPress были нужны для группировки записей, то данная таксономия, как понятно из названия — для группировки ссылок.

рубрики ссылок в WP

Если вы недавно установили WP, то вы не найдёте их у себя в админке. Дело в том, что с версии 3.5 ссылки по умолчанию сделали отключенными. Но не удалили — вставьте следующий код в файл functions.php вашей темы и ссылки вновь появятся у вас в админке. Вполне возможно, что вы найдете им применение.

add_filter( 'pre_option_link_manager_enabled', '__return_true' );

Форматы постов

Форматы на самом деле с трудом можно назвать таксономией, но фактически это так. На моём блоге им посвящён отдельный пост.

2. Пользовательские таксономии

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

Чуть подробнее про регистрацию таксономии

Техническую сторону регистрации я подробно описал в статье про функцию register_taxonomy(). Сейчас же мы рассмотрим несколько моментов.

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

    Пример: вы зарегистрировали тип записей — Автомобили, и их нужно группировать скажем по марке, стране и по объему двигателя (хотя объем лучше затолкать в произвольные поля).

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

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

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

Если же изменение параметров регистрирующей функции не в вашей власти (возьмем те же рубрики и метки), тогда вы можете и должны использовать register_taxonomy_for_object_type().

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

function kategorii_dlja_stranic(){
	register_taxonomy_for_object_type( 'category', 'page');
}
 
add_action( 'init', 'kategorii_dlja_stranic' );

Другие примеры смотрите в описании функции, ссылку на которое я дал вам выше.

Вывод таксономий в виде списка

Вы знакомы с функцией wp_list_categories()? Если нет, то наверняка видели, как на блогах рубрики выводятся в столбик в виде списка (иногда еще справа в скобках указывается количество постов в рубрике).

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

wp_list_categories('taxonomy=car_model');

Где же брать название таксономии?

  • Если таксономию создавали вы сами, то этот вопрос у вас не должен возникать.
  • Если же нет, то просто откройте страницу этой таксономии и посмотрите на ссылку в браузере:
    Как узнать название таксономии в WP?

Более сложный, но в то же время более удобный и настраиваемый вариант — функция get_terms(). Если бы мне предложили выбрать любимую функцию из кодекса, я бы выбрал её — она реально потрясающая.

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

Тут нам безусловно поможет WP_Query с параметром tax_query. Подробное описание и примеры смотрите здесь.

3. Плагины для работы с таксономиями

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

  • Simple Taxonomies by Yoast,
  • Pods,
  • Types.
Подпишитесь, чтобы раз в неделю получать свежие статьи с блога по email.

Некоторые из функций для работы с таксономиями

Комментарии 5

  • moonkir17 июля 2015 в 11:07 #

    Ссылки наезжают на текст в хроме.

    http://savepic.su/5885218.png

  • Анастасия18 июля 2015 в 09:07 #

    Классная штука для организации кулинарного сайта, думаю =) Спасибо за полезную статью, добавила в копилку

  • Надежда1 декабря 2015 в 00:12 #

    Миша, спасибо большое за полезную информацию!
    Подписалась на рассылку ))

Оставить комментарий / вопрос

phpjsHTMLCSSSQLПросто код
  Для того, чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или авторизуйтесь на сайте.
Получайте новости блога по email или следите за мной в социальных сетях.
  • Владимир: и на третьей строке не хватает скобки ) закрывающей if :)

  • Миша: Добрый вечер! Рекомендую получить ID пользователя через функцию get_current_user_id().

  • Дмитрий: Миша, подскажите пожалуйста, я использую такой редирект, но он не срабатывает: add_action( 'template_redirect', funct...

  • Миша: Ну как не определена - это аргумент функции. Или я просто вас не до конца понимаю.

  • Артем: Ага, понял. Вот только почему $args? Она же нигде не определена, по логике должна быть переменная $true_field_params или...