Терминология
Слово «Taxonomy» пришло к нам, как всегда, из греческого: taxis — расположение, nomos — закон, принцип. Т.е. Таксономия – это принцип расположения чего-либо. Для WordPress – это принцип расположения записей.
Образно, таксономии можно сравнить с папками на компьютере: куда складываются файлы. Заходим в папку, видим список файлов. В WordPress аналогично: заходим в таксономию (рубрику), видим список записей в ней.
Записи привязываются именно к элементам таксономии, а не к самой таксономии. Элементы таксономии называются terms. Для краткости так и будем их называть – термины.
Типы таксономий
При создании таксономии ей задаются свойства. Одно из самых важных свойств – это тип таксономии. Так, таксономии делятся на два типа:
- Древовидные – например рубрики
- Линейные (плоские) – например метки
Элементы древовидных таксономий могут быть родительскими и дочерними, т.е. одни элементы как бы вложены в другие. А элементы плоских таксономий всегда сами по себе, т.е. все они находятся на одном уровне
Схематически можно изобразить так:
Базовые таксономии WordPress
По умолчанию в WordPress существует пять таксономии:
- category – рубрики
- post_tag – метки
- post_format – скрытая таксономия. Термины этой таксономии – это форматы записей.
- nav_menu – скрытая таксономия. Термины этой таксономии – это созданные меню навигации, к ним прикрепляются записи (ссылки меню). Если в меню создается произвольная ссылка, то её данные помещаются в таблицу записей (wp_posts) с типом записи nav_menu_item, а запись прикрепляется к термину. Все опции ссылки (URL, анкор и т.д.) хранятся в метаполях записи.
- link_category – разделы для ссылок, которые отключены в последних версиях.
Создание своих таксономий
Создается таксономия с помощью функции register_taxonomy() или соответствующего плагина, например, «Custom Post Type UI». При этом, в базу данных ничего не добавляется, а создается только описание таксономии и её свойств в глобальной переменной PHP и в правилах ЧПУ. Как только был создан хоть один элемент таксономии, в БД появляется запись о новом термине, а к нему уже можно прикрепить запись.
Структура: таблицы таксономий в БД
В базе данных WordPress за таксономии отвечают, не много не мало, четыре таблицы. Разберем каждую.
wp_terms
Содержит элементы таксономии (термины) и базовую информацию о них. Это основная таблица элементов таксономии. Зависит от таблицы wp_term_taxonomy – они всегда идут в связке.
wp_term_taxonomy
Cодержит дополнительные данные об элементе таксономии, в частности важные из них – это к какой таксономии относится термин (поле taxonomy) и ID связи с объектом (поле term_taxonomy_id).
По большей части эта таблица нужна для поддержания устаревшей логики работы таксономий. Технически таблица wp_term_taxonomy не нужна с версии 4.2, потому что логика хранения данных изменилась и по новой логике поля taxonomy, description, parent, и count можно поместить в таблицу wp_terms и переписать весь связанный код движка и всех плагинов.
wp_term_relationships
Содержит связи терминов с записями. Таблица показывает какая запись какому термину принадлежит. Только ID термина тут связывается через поле term_taxonomy_id
wp_termmeta
Содержит метаданные терминов. Эта таблица дополняет таблицу wp_terms.
В wp_termmeta принято сохранять любые дополнительные данные термина, например это могут быть СЕО поля: заголовок, описание и что угодно еще.
Структуру таблица имеет такую же, как и другие таблицы метаданных: wp_postmeta, wp_commentmeta, wp_usermeta. Логика хранения, кэширования и получения метаданных WP едина для всех типов метаданных: посты, таксы, комменты, юзеры.
По умолчанию, эта таблицы не задействована и всегда пуста. Она используется при расширении базовых возможностей WP, как правило плагинами.