ВНИМАНИЕ: Запись на курсы по HTML, CSS, JavaScript, PHP, Python, React, Vue, Laravel и другим фреймворкам и CMS,
а также: помощь в поиске работы и заказов, стажировка на реальных проектах→
7 of 21 menu
Вступайте в телеграмм-канал сайта code.mu: новинки, статьи, интервью, задачи, бесплатные курсы и тренинги. Жми для вступления:)

Таблица wp_term_relationships

Таблица wp_term_relationships - это фундаментальная таблица в базе данных WordPress, которая устанавливает связи между объектами контента (такими как записи, страницы и медиафайлы) и терминами таксономий (такими как рубрики, метки и пользовательские таксономии). Она отвечает за то, чтобы запись знала, к каким рубрикам она принадлежит, а метка - какие записи к ней привязаны.

Поля

Поле Тип данных Описание
object_id bigint(20) unsigned Уникальный идентификатор объекта (записи, страницы, медиафайла или любого другого типа записи). Внешний ключ, который ссылается на поле ID в таблице wp_posts.
term_taxonomy_id bigint(20) unsigned Уникальный идентификатор пары "термин-таксономия". Внешний ключ, который ссылается на поле term_taxonomy_id в таблице wp_term_taxonomy. Важно: это не term_id, а именно идентификатор таксономии термина.
term_order int(11) Поле для задания порядка терминов для данного объекта. По умолчанию имеет значение 0 и редко используется в ядре WordPress или стандартных темах. Может применяться плагинами для ручной сортировки терминов, связанных с объектом.

Как это работает

Когда вы назначаете записи рубрику "Новости" и метку "Важное", WordPress выполняет следующие действия:

1. Находит ID термина "Новости" и его term_taxonomy_id в таблице wp_term_taxonomy (где таксономия будет 'category').

2. Находит ID термина "Важное" и его term_taxonomy_id в таблице wp_term_taxonomy (где таксономия будет 'post_tag').

3. Вставляет две новые строки в таблицу wp_term_relationships:

INSERT INTO wp_term_relationships (object_id, term_taxonomy_id, term_order) VALUES ( 123, 55, 0 ), -- где 123 - ID записи, 55 - term_taxonomy_id для "Новостей" ( 123, 78, 0 ); -- где 78 - term_taxonomy_id для "Важного"

Таким образом, для одной записи может существовать множество связей с разными терминами и таксономиями. Чтобы получить все термины для определённой записи, WordPress объединяет (JOIN) таблицы wp_term_relationships, wp_term_taxonomy и wp_terms.

Первичный ключ (PRIMARY KEY) для этой таблицы состоит из двух полей: object_id и term_taxonomy_id. Это гарантирует, что одна и та же запись не может быть связана с одним и тем же термином таксономии дважды.

Пример SQL-запроса

Получить все рубрики (категории) для конкретной записи с ID равным 42:

SELECT t.name, t.slug FROM wp_term_relationships AS tr INNER JOIN wp_term_taxonomy AS tt ON (tr.term_taxonomy_id = tt.term_taxonomy_id) INNER JOIN wp_terms AS t ON (tt.term_id = t.term_id) WHERE tr.object_id = 42 AND tt.taxonomy = 'category';

Найти все записи, принадлежащие к термину "WordPress" в таксономии "post_tag":

SELECT p.* FROM wp_posts AS p INNER JOIN wp_term_relationships AS tr ON (p.ID = tr.object_id) INNER JOIN wp_term_taxonomy AS tt ON (tr.term_taxonomy_id = tt.term_taxonomy_id) INNER JOIN wp_terms AS t ON (tt.term_id = t.term_id) WHERE t.slug = 'wordpress' AND tt.taxonomy = 'post_tag' AND p.post_status = 'publish';

Смотрите также

  • таблицу wp_terms,
    которая хранит сами термины (названия, ярлыки)
  • таблицу wp_term_taxonomy,
    которая определяет, к какой таксономии принадлежит термин
  • таблицу wp_posts,
    которая хранит все объекты, связанные через эту таблицу