Работа с данными в WordPress. Часть 7: работа с таксономиями и термами
Таксономии – то, что выводит WordPress за пределы простой платформы для блогов и переносит ее в мир CMS.
Однако каким образом они сохраняются в базе данных?
Таксономии и термы – мощные возможности WordPress, они позволяют вам добавить дополнительную гибкость к вашим сайтам. Они связаны с двумя другими типами контента: записями и ссылками; если рассматривать это в контексте структуры базы данных, то это означает, что они имеют отношения «один-ко-многим», т.е. одна запись может иметь много термов в разных таксономиях, а один терм может быть привязан к многочисленным записям и ссылкам.
Я приведу их определение, но, как и в случае с другими вещами в WordPress, терминология может показаться запутанной.
Определения
Таксономии
Таксономия – это система категоризации или классификации разных вещей, обычно иерархическая. Самая известная таксономия – это таксономия Линнея, которая использовалась для классификации живых организмов.
В WordPress таксономии используются для классификации ваших данных и группирования их во множества и подмножества.
В WordPress существует три встроенных таксономии:
- Рубрики
- Метки
- Ссылки
Рубрики и метки несколько напоминают записи и страницы, поскольку они представляют собой тот же самый тип контента (таксономии), однако ведут себя несколько иначе по умолчанию – рубрики являются иерархическими, а метки нет.
Таксономия ссылок работает по аналогии с метками и может теоретически использоваться для любого типа объектов, однако по умолчанию она не отображается на экране редактирования записей – ее можно видеть на экране редактирования ссылок, если ссылки были включены.
Вы можете также добавлять столько дополнительных таксономий, сколько вам требуется. Работают они по аналогии с рубриками и метками, и имеют термы. Каждая из ваших таксономий имеет тот же самый статус, что и любая другая встроенная таксономия. Все это напоминает способ сравнения записей и произвольных типов записей.
Термы
Каждая таксономия имеет термы, которые используются для сортировки данных. Рубрика – это просто терм в таксономии рубрик, а метка – это терм в таксономии меток. Если вы решите создать таксономии, вам нужно создать термы для этих таксономий – либо через консоль WordPress, либо через функцию wp_insert_term().
Термы могут выступать очень мощным инструментом при объединении их с произвольными запросами: вы можете создавать произвольные шаблоны в ваших темах и плагинах для вывода записей с многочисленными термами, сортировать по термам, идентифицировать термы в разных таксономиях и т.д.
Как WordPress хранит таксономии и термы
Как я уже писал в руководстве по отношениям между данными, WordPress использует отношение «многие-ко-многим». Это отношение создается при помощи трех таблиц:
- wp_term_relationships
- wp_term_taxonomy
- wp_terms
Эти таблицы показаны ниже, наряду с таблицами, с которыми они связаны – wp_posts и wp_links.
Давайте взглянем на каждую из этих таблиц и посмотрим, как она работает.
Таблица wp_terms
Таблица wp_terms хранит все отдельные термы для ваших рубрик, меток, ссылок и произвольных таксономий. Она имеет 4 поля:
- term_id – уникальный ID терма
- name
- slug
- term_group – поле, которое не используется в данный момент в WordPress, поэтому вы можете его спокойно игнорировать.
Таблица wp_term_taxonomy
Таблица wp_term_taxonomy хранит в себе разные данные о термах, а также данные о таксономиях, частью которых эти термы являются. Она имеет шесть полей:
- term_taxonomy_id – сохраняет ID записи в этой таблице
- term_id – отражает ID терма, связанного с его записью в wp_terms
- taxonomy – имя таксономии, к которой относится терм
- description
- parent – родительский терм (если такой есть) для определенного терма, когда таксономия является иерархической
- count – количество записей с термом
Во многих WordPress-сборках в таблице wp_term_taxonomy будет присутствовать одна запись для каждого терма из таблицы wp_terms, однако в некоторых ситуациях таких записей будет несколько для каждого терма. Это может произойти, если вы создали два терма с тем же самым именем и слагом в разных таксономиях, т.е. вы можете создать запрос для вывода постов с этим термом в многочисленных таксономиях.
Это означает, что отношения между этими двумя таблицами являются «один-ко-многим»: одна запись в таблице wp_terms может быть связана с многочисленными записями в таблице wp_term_taxonomy, однако каждая запись в wp_term_taxonomy может быть связана только с одной записью в wp_terms.
Таблица wp_term_relationships
Таблица wp_term_relationships очень важна для создания отношений «многие-ко-многим» между объектами и термами. Она имеет три поля:
- object_id связан с post_id в таблице wp_posts или с link_id в таблице wp_links
- term_taxonomy_id связан с тем же самым полем в таблице wp_term_taxonomy
- term_order – порядок, в котором термы были добавлены к объекту. Используется это только в том случае, если вы определили аргумент sort = true при регистрации таксономии – по умолчанию он задан как false, и стандартное значение для этого поля – 0.
Так как каждый объект может быть связан с многочисленными записями в таблице wp_term_relationships, и то же самое может делать каждый терм, это создает отношение «многие-ко-многим».
Заключение
Отношение между объектами (т.е. постами и ссылками) и термами очень мощное, частично по той причине, что оно является единственным отношением «многие-ко-многим», используемым в WordPress.
Понимание того, как это отношение работает и где хранятся ключевые данные, поможет вам открыть для себя работу таксономий и термов во всех деталях. Вы сможете без проблем использовать функции, связанные с ними.
Источник: code.tutsplus.com