Поскольку это часть более глубокого понимания дизайна, я опишу его целиком ... :)
В 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