Работа с данными в 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.

table-and-related-tables

Давайте взглянем на каждую из этих таблиц и посмотрим, как она работает.

Таблица 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

Блог про WordPress
Добавить комментарий

Получать новые комментарии по электронной почте.