Статьи

Понимание и работа с таксономиями и терминами в WordPress

Таксономии — это то, что выводит WordPress за пределы простой платформы ведения блогов и входит в сферу CMS.

Но как они хранятся в базе данных?

Таксономии и термины — это мощная функция WordPress, которая позволяет вам повысить гибкость своих сайтов. Они связаны с двумя другими типами контента: сообщениями и ссылками, а структура базы данных означает, что это отношение «один ко многим», когда одно сообщение может иметь несколько терминов в нескольких таксономиях, а один термин может быть назначен нескольким публикациям или ссылки.

Я начну с определения их, как и в WordPress, терминология может сбивать с толку!

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

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

WordPress поставляется с тремя встроенными таксономиями :

  • категория
  • тег
  • категория ссылки

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

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

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

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

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

Как я описал в руководстве по отношениям между данными, WordPress использует отношение «многие ко многим». Это отношение создается с помощью трех таблиц:

  • wp_term_relationships
  • wp_term_taxonomy
  • wp_terms

Эти таблицы показаны ниже вместе с таблицами, с которыми они связаны, wp_posts и wp_links :

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

В таблице wp_terms хранятся все отдельные термины для ваших категорий, тегов, категорий ссылок и пользовательских таксономий. В ней всего четыре поля:

  • term_id — уникальный идентификатор для термина
  • name
  • slug
  • term_group — это поле, которое в настоящее время не используется WordPress, поэтому вы можете спокойно его игнорировать.

В таблице wp_term_taxonomy хранится больше данных о терминах, а также о таксономиях, в которые они входят. Имеет шесть полей:

  • term_taxonomy_id хранит идентификатор для записи в этой таблице
  • term_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 имеет решающее значение для создания отношения «многие ко многим» между объектами и терминами. Всего три поля:

  • object_id связан с post_id в таблице link_id или link_id в таблице wp_links
  • term_taxonomy_id связан с тем же полем в таблице wp_term_taxonomy
  • term_order — порядок, в котором термины были добавлены к объекту. Это используется только в том случае, если вы указали аргумент сортировки как true при регистрации таксономии — по умолчанию используется значение false и значение по умолчанию для этого поля равно 0.

Поскольку каждый объект может быть связан с несколькими записями в таблице wp_term_relationships , как и каждый термин, это может создавать отношение «многие ко многим».

Взаимосвязь между объектами (т.е. сообщениями и ссылками) и терминами является очень мощной, отчасти потому, что это единственное отношение «многие ко многим», используемое WordPress.

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