あくまで自分用の覚え書きなので文章とか適当です...

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

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

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

データベーステーブルの基礎

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

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

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

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

テーブル一覧

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

テーブル名保存しているデータ
wp_posts投稿、固定ページ、メディア、カスタムメニュー、カスタム投稿、リビジョン等の投稿関連の主要なデータ
wp_postmetawp_postsのメタデータ。主にカスタムフィールド。
wp_termsカテゴリー・タグ・カスタムタクソノミーのターム名やそのスラッグの情報
wp_term_taxonomyカテゴリー・タグ・カスタムタクソノミーとターム名を関連付けるためのデータ。
wp_term_relationshipsカテゴリー・タグ・カスタムタクソノミーと投稿を関連付けるためのデータ
wp_user管理者等々のユーザー情報を格納しているテーブル。ユーザー名・パスワード・メールアドレス等を保存している。
wp_usermeta各ユーザ特有のユーザ・メタデータを格納
wp_commentWordPressへのコメント・トラックバック・ピンバックデータを格納
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」 関数を使用します。

<?php echo get_post_meta( $post->ID , 'feeling' , true ); ?>

「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に視覚的に表したわかりやすい図があります。

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

スポンサーリンク