Таксономии
Урок 20
Таксономии — это такие сущности, которые нужны для группировки постов (записей, страниц или постов произвольного типа).
Если вы работали с WordPress, то наверняка уже работали и с таксономиями. Потому что «Рубрики» и «Метки» у записей как раз-таки и являются таксономиями!
Итак, несколько моментов по работе с таксономиями:
category
, метки post_tag
, меню nav_menu
и форматы постов post_format
,wp_terms
, wp_term_taxonomy
, wp_term_relationships
и wp_termmeta
.Если вам уже не терпиться заняться практикой, то скорее включайте видео, я же расскажу ещё несколько моментов по порядку.
Чтобы скачать тему WordPress, которая получилась у нас в процессе этого урока, необходимо приобрести курс.
Рубрики и метки – это публичные таксономии WordPress, которые по умолчанию имеют отношение только к обычным записям.
Тут есть один важный исторический момент, о котором не нужно забывать. Когда WordPress только появился, у него не было не произвольных типов постов, ни произвольных таксономий, были только «Записи», «Страницы», «Рубрики», «Метки» (грубо говоря), благодаря чему функции по работе с таксономиями делятся на три группы – функции для рубрик, функции для меток, функции для таксономий, но по факту на сегодняшний день большинство из них не отличаются и, скажем, вы спокойно можете использовать функцию get_category_link() для получения URL страницы метки.
Когда мы говорим о меню, то можем говорить о двух сущностях:
nav_menu
, которая является самим меню (Меню 1, Меню 2, Меню в футере и n&l)nav_menu_item
, который является ссылками в меню.Для наглядности чекаем скриншот:
Форматы на самом деле с трудом можно назвать таксономией, но фактически это так. На моём блоге им посвящён отдельный пост.
Если мы говорим о стандартных таксономиях WordPress, то среди них только рубрики являются древовидными, то есть это когда у элементов таксономий могут быть дочерние элементы.
Древовидность таксономии также отразиться и на URL-ах самих терминов, например страница категории «kenzo» может иметь URL: http://сайт/category/ryukzaki/brendy/kenzo
.
Также интерфейс древовидных и недревовидных таксономий на странице редактирования записи отличается. Древовидные выводятся в виде списка чекбоксов:
Недревовидные вот так:
Хотя у меня был древний урок на сайте, где я рассказывал, как это поменять.
И вот в один прекрасный день наступает момент, когда нам начинает не хватать стандартных рубрик и меток для группировки постов. Конечно такое может и не произойдёт для стандартных записей и страниц, но если вы используете произвольные типы записей, то вполне вероятно.
Например в видеоуроке мы регистрируем таксономию «Страны», по которым будут фильтроваться лиды, поступающие с сайта.
Никогда! Не используйте плагины для регистрации типов записей.
Объясню почему. Смотрите, чтобы зарегистрировать таксономию, вам достаточно примерно вот такого кода:
add_action( 'init', function() { register_taxonomy( 'country', 'lead', array( 'public' => true ) ); });
Понятное дело, что если вы хотите всё супер-детально настроить, то параметров у функции будет чуть больше, подробно я их всех описал тут.
Одна из глобальных проблем WordPress – это то, что некоторые «разработчики» (я их ещё называю настройщиками) приходят в такой ужас от этих трёх строчек кода, что решают установить тяжеловесный плагин, который позволит им зарегистрировать таксономию через интерфейс в админке, что уже само по себе в корне неправильно, потому что мы получаем дополнительные запросы в базу данных для получения параметров, типо как 'public' => true
, который в моём случае написан прямо в коде и жрёт 0 производительности вместо 100500. Да, до сих пор не могу понять этих людей :)
Ну во-первых, если вы сами регали таксономию через код, то конечно же надо было сразу указать все типы записей, для которых будет использована группировка по этой таксономии.
Если же изменение параметров регистрирующей функции не в вашей власти (возьмем те же рубрики и метки), тогда вы можете и должны использовать register_taxonomy_for_object_type() для прикрепления таксономий и unregister_taxonomy_for_object_type(), чтобы наоборот откреплять таксономии..
Допустим вы взяли и захотели, чтобы в рубрику можно было добавлять не только записи но и страницы! Тогда код будет следующим:
add_action( 'init', 'true_kategorii_dlja_stranic' ); function true_kategorii_dlja_stranic(){ register_taxonomy_for_object_type( 'category', 'page'); }
Конечно функций существует огромной количество, но я бы выделил несколько самых часто используемых и удобных.
Функция | Для чего |
---|---|
get_terms() | Супер-удобна для получения терминов любых таксономий по определённым критериям. |
get_the_terms() | Для вывода терминов поста. |
WP_Query (параметр tax_query) | Для вывода постов. |
Где же брать название таксономии для этих функций?
Список уроков