Таблица 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
,
которая хранит все объекты, связанные через эту таблицу