I am a PHP developer and recently I am trying to build a platform which needs lots of categories/filters/tags some in hierarchy some not.
So the question is…
I am able to manage terms in these tables
terms
, terms_metadata
and terms_relationships
, but there is another table in WordPress – terms_taxanomymy
.
What is the significance of defining another table for just storing “parent”, “type”, “count” and “description” when you can do that in terms
table itself.
1 Answer
Well, it uses 3 tables. The fourth one (wp_termmeta
) is just a way of allowing you to store some meta values for terms (icons, additional descriptions and so on).
Citing from Codex:
- wp_terms – The categories for both posts and links and the tags for posts are found within the wp_terms table.
- wp_termmeta – Each term features information called the meta data and it is stored in wp_termmeta.
- wp_term_relationships – Posts are associated with categories and tags from the wp_terms table and this association is maintained in
the wp_term_relationships table. The association of links to their
respective categories are also kept in this table.- wp_term_taxonomy – This table describes the taxonomy (category, link, or tag) for the entries in the wp_terms table.
So the only part that may be confusing is that there are separate tables for terms and term_taxonomy… And it can be confusing, because it has lost its meaning nowadays.
But before WP 4.2.2 (I guess) the approach to terms was a little bit different – terms were unique across wp_terms
table.
So if you had “books” as category and “books” as tag, then there was only one record with “books” in wp_terms
and obviously 2 records in wp_term_taxonomy
.
But when the wp_termmeta
table was introduced it would make it confusing – so such terms were split. And today, for the example above, you’ll have two separate rows in wp_terms
table.