MENU

【図解】WordPressのテーブル構造はどうなっているの?

WordPressは記事などデータをデータベースに保存しています。

普段は意識しませんが、プラグインを作っていると、「WordPressデータベースには、どのようにデータが保存されているのか?」テーブル構成を気になってきました。

今回は、データベースの中身をのぞいて、テーブル構造を確認していきます。

目次

WordPressのテーブル一覧

WordPress(ver 5.8.2)のデータベースには12個のテーブルがありました。

テーブル名の接頭辞(wp_)は、WordPress インストール時の設定によります。

テーブル名説明
wp_commentmetaコメントのメタ情報。
プラグインなどでコメントに紐づくデータを格納するときに使う。
wp_commentsWordPress へのコメント・トラックバック・ピンバックデータを格納
wp_linksリンク作成 で入力されたリンク情報を格納。(Codexによると、この機能は非推奨)
wp_options管理>設定 で設定されたオプション設定を格納。
サイトURLやホームURL、サイト名、説明などが入っている。
プラグインの設定情報もここに格納する。
wp_postmetaメタデータという各投稿に各投稿に情報や設定を付加するための情報を格納。
主にカスタムフィールドとして使う。
wp_posts投稿記事、 ページ 、ナビゲーションメニューのデータを格納
wp_termsカテゴリ・タグの名前やスラッグなどの基本データを格納。
wp_term_relationshipswp_postsの各投稿と カテゴリ・タグとの紐付けを情報を格納。
各投稿にどのカテゴリ、タグが設定されているかのデータが入っている。
wp_term_taxonomywp_termsのデータがカテゴリなのかタグなのか、分類データを格納
wp_termmetaver4.4から、新しく追加されたテーブル。カテゴリ・タグのメタ情報を格納。
wp_usermeta各ユーザ特有のユーザ・メタデータを格納。
wp_users登録ユーザ情報を格納。

主に、5種類のデータが格納されています。

  • 投稿に関わるデータ(wp_posts、wp_postmeta)
  • コメントに関わるデータ(wp_comments、wp_commentmeta)
  • カテゴリ・タグに関わるデータ(wp_terms、wp_term_relationships、wp_term_taxonomy、wp_termmeta)
  • ユーザーに関わるデータ(wp_users、wp_usersmeta)
  • 設定に関わるデータ(wp_options)

※wp_linksは非推奨とのことで割愛。

これらのテーブルには、テーマやプラグインによって新しいデータが格納されたり、既存データが更新されます。また新しいテーブルが作成されることもあります。

今回は主要なテーブルとして投稿とタクソノミーのテーブルを見ていきます。

投稿関連のテーブル

wp_postsの主なテーブル項目

まずは最重要データであるwp_posts。固定ページ、投稿、添付ファイルなどを格納する。

テーブル項目説明
ID投稿ID(保存順に自動採番)
post_author投稿者のユーザID
post_date投稿日時
post_content本文
post_titleタイトル
modified_date更新日時
post_status投稿ステータス。
'publish': 公開済み
'pending': ペンディング
'draft': 草稿
'private': プライベート(非公開)
'attachment':
'inherit': 継承(添付ファイル、改訂履歴・自動保存のとき)
'future': 予約投稿
post_type投稿種別
'post': 投稿
'page'ページ
'attachment': 添付ファイル
'revision': 改訂履歴・自動保存

wp_postmetaの主なテーブル項目

投稿のメタ情報を格納。主にカスタムフィールドに使われる。

テーブル項目説明
meta_idメタID(一意)(登録順に自動採番)
post_id投稿ID
meta_keyカスタムフィールドのキー名
meta_valueカスタムフィールドの値

post(投稿)にはpostmeta、comment(コメント)にはcommentmeta、term(カテゴリー・タグ)にはtermmetaと、それぞれメタ情報を保管するテーブルが用意されています。

wp_postsとwp_postmetaの関係

wp_postsとwp_postmetaの関係

タクソノミー関連のテーブル

続いて、カテゴリーやタグ関連のテーブル。

テーブルには「term(ターム)」や「taxonomy(タクソノミー)」という名前がつけられている。

タクソノミーについて調べてみると、グルーピング(分類)のことを意味しているらしい。

WordPress では、「分類 (タクソノミー)」は投稿 (またはリンク、カスタム投稿タイプ) をグループ化するための仕組みのことです。

タクソノミー

タクソノミーの一つとして、カテゴリーやタグが用意されている。

呼び方としては、グルーピングの概念をタクソノミーとよび、カテゴリーやタグなどの具体的なグループのことを「ターム」と読んでいるとのことです。

さらに、カテゴリーやタグ以外にも、カスタム分類として独自のグルーピングを追加することもできます。

wp_termsの主なテーブル項目

タームの名前やスラッグを格納するテーブル。

テーブル項目説明
term_idterm のユニークID
nameterm 名
slugterm スラッグ
term_group類義語のグルーピング

wp_term_relationshipsの主なテーブル項目

記事とタームを紐づけるためのテーブル

テーブル項目説明
object_id記事ID or リンクID
term_taxonomy_idterm_taxonomy テーブルの term_taxonomy_id
term_order

wp_term_taxonomyの主なテーブル項目

タクソノミーがカテゴリなのか、タグなのか分類のデータが入っている。

テーブル項目説明
term_taxonomy_idterm+taxonomy ペアのユニークID
term_idwp_terms テーブルの term_id
taxonomyterm が属する taxonomy
'category': 記事カテゴリ
'link_category': リンクカテゴリ
'post_tag': タグ
descriptionterm の分類上の説明。「カテゴリ説明」など
parent分類上の term 間の上下関係
countterm+taxonomy ペアに関連付けられたオブジェクト数。
例えば、taxonomy=’category’ であればこのカテゴリに属する投稿記事数

wp_terms、wp_term_relationships、wp_term_taxonomyの関係

実際にWordPressを動かしながら、データの入り方をみていきます。

まず、カテゴリーに親カテゴリー:日記、小カテゴリー:読んだ本を登録します。

そして、新たに、タグ「ファンタジー」を登録します。

この時点で、データベースは以下のようなデータが入っています。。

  • カテゴリーもタグも、wp_termsに名前とスラッグがデータとして入る。
  • 「日記」「読んだ本」はカテゴリーなので、wp_terms_taxonomyのtaxonomyはcategoryになっている
  • 「ファンタジー」はタグなので、wp_terms_taxonomyのtaxonomyはpost_tagになっている
  • 「読んだ本」は日記のサブカテゴリーなので、wp_terms_taxonomyのparentに、親のterm_id(日記)が入っている。

続いて、記事を二つ投稿し、それぞれカテゴリーとタグを設定します。
記事ID 14: カテゴリー「日記」、タグなし
記事ID 17: カテゴリー「読んだ本」、タグ「ファンタジー」

データベースを確認すると、wp_term_relationshipsにwp_posts(投稿)とwp_terms(カテゴリー・タグ)の紐付けが入っています。

  • wp_term_taxonomyのcountにはそのカテゴリ・タグが設定されている記事数がはいる。
  • URLをコピーしました!

この記事を書いた人

元エンジニア・コンサルタント→フリーランスへ。
個人事業主さん向けにWordPress・HP作成の個人レッスンをしています。

目次