В чем разница между term_id и term_taxonomy_id


20

Название говорит само за себя. В настоящее время в моих пользовательских таксономиях я получаю термины, используя термин id и название таксономии.

Подумал, что этот вопрос уже задавали, но нигде не могу его найти! Так что подумал, что я спрошу и посмотрю, есть ли у кого-нибудь ответы

Ответы:


21

Если вы посмотрите документацию Wordpress, вы найдете таксономии Wordpress.

  • term_id - это идентификатор термина в таблице терминов
  • term_taxonomy_id - это уникальный идентификатор пары термин + таксономия.

так что манипулирование и захват терминов, основанных только на term_id, не вызовут дубликатов?
Daithí

1
на самом деле только что ответил на последний вопрос. Посмотрел таблицу wp_terms и да, используя только term_id, безопасно. Спасибо за ваш ответ @Juan
Daithí

2
Просто обратите внимание, что в WordPress 4.2 все термины были разделены , что означает, что каждый из них term_idтеперь встречается в term_taxonomyтаблице только один раз (до того, как столбец не стал уникальным и термины могли быть разделены между таксономиями). Это может продолжать развиваться в будущем, основываясь на дорожной карте таксономии . Одна часть этого состоит в том, чтобы объединить термин и таблицы терминов таксономии .
JD

11

Кодекс говорит:

  • term_id - это идентификатор термина в таблице терминов
  • term_taxonomy_id - это уникальный идентификатор пары термин + таксономия

Что это значит?

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

Допустим, у вас есть термин под названием «откорма». Это слово имеет идентификационный номер. Это термин_ид. Это не зависит от того, как используется это слово, то есть в каких таксономиях появляется термин.

Теперь слово «откорма» в качестве почтового тега также имеет номер. Это term_taxonomy_id. Это соответствует «почтовому тегу« откорма ».

Может быть, у вас также есть категория под названием «откорма». Хотя term_id одинаков, term_taxonomy_id для «категории« откорма »отличается.


5

Поскольку это часть более глубокого понимания дизайна, я опишу его целиком ... :)

В WP 4.5.3 есть еще все эти таблицы (я буду говорить о них без префикса):

  • сообщений
  • term_relationships
  • term_taxonomy
  • условия

Путь к получению понятных имён после терминов проходит через все.

посты
основным идентификатором здесь ID- идентификатор поста (любого типа)

term_relationships
хранит пары из:
object_id- может быть posts.ID(но не обязательно)
term_taxonomy_id- это НЕ идентификатор термина (категории), а идентификатор ОТНОШЕНИЯ между термином (категорией) и таксономией («тип категории»)

term_taxonomy,
основной идентификатор здесь term_taxonomy_idописан выше ^^
другие важные столбцы:
term_id- идентификатор термина (категории)
taxonomy- хранит таксономию термина («тип категории»)

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

термины,
основной идентификатор здесь term_id- это идентификатор категории,
другими важными столбцами здесь являются:
name- читаемое имя категории, например, «Музыкальные жанры»
slug- кусок используемого термина, например, в URL

Таким образом, жестокая демонстрация SQL для
получения всех опубликованных постов и всех их категорий с именами категорий
может выглядеть следующим образом (добавляйте префиксы к таблицам при тестировании на собственной WP DB):

SELECT * FROM
posts #gets posts
LEFT JOIN
term_relationships #gets posts relationships to term_taxonomies
ON(posts.ID=term_relationships.object_id)
LEFT JOIN
term_taxonomy #gets term_ids 
ON(term_relationships.term_taxonomy_id=term_taxonomy.term_taxonomy_id)
LEFT JOIN
terms #finally, gets terms' names
ON(term_taxonomy.term_id=terms.term_id)
WHERE (
    (posts.post_status='publish') 
    #optionally you can filter by a certain post_type:
    #AND
    #(posts.post_type='some_post_type')
)
ORDER BY posts.ID ASC

2

Термин не является категорией или тегом сам по себе. Он должен быть задан контекстом через таблицу term_taxonomy.

Таблица term_taxonomy помещает термин в таксономию. Это то, что делает термин категорией , тегом или частью пользовательской таксономии (или в комбинации таксономий).

term_id идентификатор термина в таблице терминов.

term_taxonomy_id является уникальным идентификатором пары термин + таксономия

term_idВсегда уникален так же , как term_taxonomy_id. Оба имеют Auto Incrementв структуре таблицы.

В таблице wp_term_taxonomyубеждается, например , что категория создается, поэтому WordPress могут взаимодействовать с ним , например , WooCommerce использования: product_tag, product_type, product_cat, все они являются так называемые пользовательские таксономии. Эта таблица также связывает структуру parent / children. С его колонкой parent.

В последней таблице term_relationships связываются такие объекты, как сообщения или ссылки на term_taxonomy_id из таблицы term_taxonomy.

Если мы снова выберем Woocommerce в качестве примера, эта таблица связывает тип записи productsс их таксономией product_cat, которая содержит наглядный пример, например «Компьютеры», которые, конечно, извлекаются из таблицы wp_terms. Эта таблица содержит term_id, name, slugи term_group. (term_group я лично никогда не использовал)

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.