投稿、タクソノミー、タームの関係

投稿、タクソノミー、タームの関係について確認します。また関連するテーブルについても取り上げます。

用語整理

  • タクソノミー ( taxonomy 分類種類 )
    • カテゴリ
      • 親子階層にできる
    • タグ
      • 親子階層にできない
  • ターム ( term 分類名称 )
    • カテゴリ名
    • タグ名

例を示します。

  • タクソノミー
    • 地域カテゴリー
  • ターム
    • 東京都, 埼玉県, 茨城県 …

関連テーブル

下記テーブルについて確認します。

テーブル 概要
wp_posts 投稿情報を管理
wp_term_relationships 投稿とタームを紐づけ
wp_term_taxonomy タクソノミー情報と紐づくタームを管理
wp_terms タームを管理

wp_posts

mysql> SELECT `wp_posts`.`ID`,
    ->        `wp_posts`.`post_type`,
    ->        `wp_posts`.`post_name`
    -> FROM wp_posts
    -> WHERE `wp_posts`.`ID` = 1;
+----+-----------+-------------+
| ID | post_type | post_name   |
+----+-----------+-------------+
|  1 | post      | hello-world |
+----+-----------+-------------+
1 row in set (0.00 sec)

wp_term_taxonomy

mysql> SELECT *
    -> FROM `wp_term_relationships`;
+-----------+------------------+------------+
| object_id | term_taxonomy_id | term_order |
+-----------+------------------+------------+
|         1 |                2 |          0 |
|         1 |                3 |          0 |
|         1 |                4 |          0 |
+-----------+------------------+------------+
3 rows in set (0.00 sec)

wp_term_relationships

mysql> SELECT *
    -> FROM `wp_term_taxonomy`;
+------------------+---------+----------+-------------+--------+-------+
| term_taxonomy_id | term_id | taxonomy | description | parent | count |
+------------------+---------+----------+-------------+--------+-------+
|                1 |       1 | category |             |      0 |     0 |
|                2 |       2 | category |             |      0 |     1 |
|                3 |       3 | post_tag |             |      0 |     1 |
|                4 |       4 | post_tag |             |      0 |     1 |
+------------------+---------+----------+-------------+--------+-------+
4 rows in set (0.01 sec)

wp_terms

mysql> SELECT *
    -> FROM `wp_terms`;
+---------+------------------+------------------------------------------------+------------+
| term_id | name             | slug                                           | term_group |
+---------+------------------+------------------------------------------------+------------+
|       1 | カテゴリーA         | %e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%83%bca |          0 |
|       2 | カテゴリーB         | %e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%83%bcb |          0 |
|       3 | タグA             | %e3%82%bf%e3%82%b0a                            |          0 |
|       4 | タグB             | %e3%82%bf%e3%82%b0b                            |          0 |
+---------+------------------+------------------------------------------------+------------+
4 rows in set (0.00 sec)

結合して表示

投稿に カテゴリーA タグA タグB が紐づいています。

SELECT `wp_posts`.`ID`,
       `wp_posts`.`post_type`,
       `wp_posts`.`post_name`,
       `wp_term_taxonomy`.`taxonomy`,
       `wp_term_taxonomy`.`parent`,
       `wp_term_taxonomy`.`count`,
       `wp_terms`.`name`
FROM `wp_posts`
LEFT JOIN `wp_term_relationships`
ON `wp_posts`.`ID` = `wp_term_relationships`.`object_id`
LEFT JOIN `wp_term_taxonomy`
ON `wp_term_relationships`.`term_taxonomy_id` = `wp_term_taxonomy`.`term_taxonomy_id`
LEFT JOIN `wp_terms`
ON `wp_terms`.`term_id` = `wp_term_taxonomy`.`term_id`
WHERE `wp_posts`.`ID` = 1;
mysql> SELECT `wp_posts`.`ID`,
    ->        `wp_posts`.`post_type`,
    ->        `wp_posts`.`post_name`,
    ->        `wp_term_taxonomy`.`taxonomy`,
    ->        `wp_term_taxonomy`.`parent`,
    ->        `wp_term_taxonomy`.`count`,
    ->        `wp_terms`.`name`
    -> FROM `wp_posts`
    -> LEFT JOIN `wp_term_relationships`
    -> ON `wp_posts`.`ID` = `wp_term_relationships`.`object_id`
    -> LEFT JOIN `wp_term_taxonomy`
    -> ON `wp_term_relationships`.`term_taxonomy_id` = `wp_term_taxonomy`.`term_taxonomy_id`
    -> LEFT JOIN `wp_terms`
    -> ON `wp_terms`.`term_id` = `wp_term_taxonomy`.`term_id`
    -> WHERE `wp_posts`.`ID` = 1;
+----+-----------+-------------+----------+--------+-------+------------------+
| ID | post_type | post_name   | taxonomy | parent | count | name             |
+----+-----------+-------------+----------+--------+-------+------------------+
|  1 | post      | hello-world | category |      0 |     1 | カテゴリーB         |
|  1 | post      | hello-world | post_tag |      0 |     1 | タグA             |
|  1 | post      | hello-world | post_tag |      0 |     1 | タグB             |
+----+-----------+-------------+----------+--------+-------+------------------+
3 rows in set (0.00 sec)