WordPressのデータベースのテーブルってどうなってるの?

WordPressのデータベースについて自分用オボエガキです。

テーブル構成を把握しておくメリットとしては…

  1. 頭の片隅にでも置いておくと何気なく記述しているソースの理解が深まるかもしれない。
  2. プラグインによってテーブルが追加されることがあるが、必要がなくなった場合に不要なデータが把握しやすくなる。
  3. WordPressのコアの関数では取得が難しいもののSQLを実行すれば簡単なこともある。「wpdb」というクラスを使って、データベースにアクセスすることができる。(「$wpdb->posts」みたいな記述たまに見ますよね。)
    ※$wpdb->postsは「wp_posts」テーブルのデータを参照できます。

参考 データベース構造 – WordPress Codex 日本語版


まずはテーブルの基礎から。
記事のネタがWordPressなので一番重要なテーブルである「wp_posts」テーブルの例で説明。

のことをフィールド(もしくはカラム)と呼び、のことをレコードと呼びます。


スポンサーリンク

WordPressは11個のテーブルで構成されている。

少ない…。
確かEC-CUBEは100個以上あったような。
サイトの内容によって意識した方がいいテーブルの順位は変わってくるかと思いますが、
個人的には「wp_posts」、「wp_postmeta」、「wp_terms」、「wp_term_taxonomy」、「wp_term_relationships」あたりを抑えておけばとりあえずはいいかなと思っています。

テーブル一覧

黄色のセルのテーブルは詳細を後述します。

テーブル名 保存しているデータ
wp_posts 投稿、固定ページ、メディア、カスタムメニュー、カスタム投稿、リビジョン等の投稿関連の主要なデータ
wp_postmeta wp_postsのメタデータ。主にカスタムフィールド。
wp_terms カテゴリー・タグ・カスタムタクソノミーのターム名やそのスラッグの情報
wp_term_taxonomy カテゴリー・タグ・カスタムタクソノミーとターム名を関連付けるためのデータ。
wp_term_relationships カテゴリー・タグ・カスタムタクソノミーと投稿を関連付けるためのデータ
wp_user 管理者等々のユーザー情報を格納しているテーブル。ユーザー名・パスワード・メールアドレス等を保存している。
wp_usermeta 各ユーザ特有のユーザ・メタデータを格納
wp_comment WordPressへのコメント・トラックバック・ピンバックデータを格納
wp_commentmeta 各コメントのメタデータと呼ばれる情報。
wp_options 管理画面メニューの「設定」で入力した情報を保存しているテーブル。
wp_links この機能は非推奨になりました、とCodexに書いてあるので無視することにします。

一覧重要な「wp_posts」テーブルの主なフィールドをチェック!

本当は「テーブルの基礎」の図の様に横書きにできたらフィールド(カラム)とレコードのイメージが掴みやすいのですが、はみ出してしまうので縦書きにします。

「wp_posts」テーブルの主なフィールド

フィールド名 保存されるデータ
ID 投稿ID(保存順に自動採番)
post_title タイトル
post_content 本文
post_excerpt 抜粋
post_status ステータス:「公開済み」や「下書き」
post_date 投稿日時
post_name 投稿スラッグ
post_type 投稿種別:投稿(post)、ページ(page)等

ちなみに「wp_posts」テーブルの内容は、グローバル変数「$post」の中身と一緒です。

その他、特筆すべきは「post_type」のところで、WordPressは投稿と固定ページが同じテーブルに保存されているところ。ええーそうなの?という印象。
ここのデータが「post」、「page」かで判断しているようです。

「wp_postmeta」テーブルについて

「wp_posts」にカスタムフィールドを追加した場合は「wp_postmeta」テーブルにデータが追加されていきます。

ここが特殊だよWordPressテーブルの構造!

一般的に情報を追加する場合は同じレコードに対してフィールド(カラム)を追加するのですが・・・

WordPressの場合はちょっと異なる仕組みのようです。
「wp_posts」テーブルにフィールド(カラム)を追加していくのではなく、別のテーブルである「wp_postmeta」テーブルに情報が追加されます。

「wp_postmeta」テーブルに追加したカスタムフィールドの値を表示させるには関数「get_post_meta」を使用します。

「get_post_meta」という関数名からもフムフム「wp_postmeta」テーブルの情報を引っ張ってきているのね、というのが推測できます。

分類を保存する3つのテーブル

これらも覚えておいた方が良さそうです。

  • 「wp_terms」テーブル
  • 「wp_term_taxonomy」テーブル
  • 「wp_term_relationships」テーブル

個人的解釈としては下記のようなイメージです。

タクソノミー:映画
ターム:アクション/ホラー/コメディ…

  1. 「wp_terms」テーブルにターム「アクション/ホラー/コメディ…」情報を格納
  2. 「wp_term_taxonomy」テーブルで各ターム「アクション/ホラー/コメディ…」とタクソノミー「映画」を関連付け
  3. 「wp_term_relationships」テーブルでタクソノミー「映画」と投稿を関連付け

「wp_terms」テーブルの主なフィールド

※カテゴリー・タグ・カスタムタクソノミーのターム名やそのスラッグのデータが格納されています。

フィールド名 保存されるデータ
term_id タームのユニークID
name ターム名
slug タームスラッグ

「wp_term_taxonomy」テーブルの主なフィールド

※カテゴリー・タグ・カスタムタクソノミーとターム名を関連付けるためのデータが格納されています。

フィールド名 保存されるデータ
term_taxonomy_id ターム + タクソノミー ペアのユニークID
term_id 「wp_terms」テーブルの「term_id」
taxonomy タームが属するタクソノミー
description タームの分類上の説明。「カテゴリ説明」など
parent 分類上のターム間の上下関係
count そのタームに属する投稿数の数

「wp_term_relationships」テーブルの主なフィールド

※カテゴリー・タグ・カスタムタクソノミーと投稿を関連付けるためのデータが格納されています。

フィールド名 保存されるデータ
object_id 記事ID
term_taxonomy_id 「term_taxonomy」テーブルの「term_taxonomy_id」

各テーブルの相関関係

WordPress Codexに視覚的に表したわかりやすい図があります。

Codexの「テーブル相関関係図」はこちらから »

前述の通り、例えば投稿基本情報の「wp_posts」テーブルとターム情報「wp_terms」テーブルは別々に管理されているのですが、一意のID(プライマリーキー)で関連付けがされています。
これが「リレーショナルデータベース」という訳です。フムフム。

本記事内容に誤り等ありましたらコメント欄にてご指摘いただけますと感謝いたします。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

コメント

  1. […] WordPressのデータベースのテーブルってどうなってるの?という記事が分かりやすかったです。WordPressCode日本語版のデータベース構造は図になってるので理解し易いです。 […]