WordPressのデータベース・テーブル構造【まるわかり】

2019-09-19

mono
mono
こんにちは、monoです。

WordPressのデータベースのテーブル構造ってめちゃくちゃいびつでわかりにくいですよね(資料も少ないし…)。

そこで当記事では、

WordPressのテーブル構造を理解したい

という方向けに、

  1. WordPressのテーブル一覧
  2. 各テーブルの詳細
  3. 各テーブル間の関係性
  4. そのまま使える便利なSQL

について解説していきます。

WordPressのテーブル一覧

WordPressのテーブルは、以下の11テーブルで構成されています。

以下がWordPressのテーブル一覧です。

テーブル名 データの内容
wp_posts 投稿ページ、固定ページ、メディア、カスタムメニュー、カスタム投稿、リビジョン、下書き等、投稿に関する主要なデータが格納されている
wp_postmeta wp_postsのメタデータ。主にカスタムフィールドが格納されている
wp_terms カテゴリー、タグ、カスタムタクソノミーのターム名、およびそれらスラッグの情報が格納されている
wp_term_taxonomy カテゴリー、タグ、カスタムタクソノミーとそれらターム名を関連付けるためのデータやディスクリプション、各タームが投稿・固定ページへの記事数などが格納されている
wp_term_relationships カテゴリー、タグ、カスタムタクソノミーと投稿・固定ページを関連付けるためのデータが格納されている
wp_user ユーザー名・パスワード・メールアドレス等、ユーザーに関する情報が格納されている
wp_usermeta 各ユーザ特有のメタデータが格納されている
wp_comment サイトに寄せられたコメント・トラックバック・ピンバックのデータが格納されている
wp_commentmeta 各コメントのメタデータが格納されている
wp_options 管理画面メニューの「設定」で入力した情報が格納されている
wp_links サイトのリンク情報を格納するテーブルだが、現在は使われていない※プラグイン(Link Manager)で有効化が可能

「wp_links」は現在ほとんど使われていないようですので、実質10テーブルですね。

「思ったより多くない」と安心した方も多いのではないでしょうか?

しかし、WordPressのテーブル構造の深淵はここからなのです……

続いて各テーブルの詳細とテーブル間の関係性について解説していきます。

各テーブルの詳細と関係性

コンテンツ(記事・メディア)に関するテーブル

WordPressのテーブルのうち、コンテンツに関わるテーブルは、

  • wp_posts
  • wp_postmeta

の2テーブルです。

wp_postsの主なフィールド一覧

フィールド名 データ
ID 投稿ID(保存順に自動採番)
post_author 投稿者のユーザID
→wp_users.idと関連
post_date 投稿日時
post_content 本文
post_title タイトル
post_status 投稿ステータス
・publish': 公開済み
・pending': ペンディング
・draft': 草稿
・private': プライベート(非公開)
・static':(2.0.x 以前はページ)
・object':
・attachment':
・inherit': 継承(添付ファイル、改訂履歴・自動保存のとき)
・future': 予約投稿
comment_status コメントステータス
・open': 許可
・closed': 不許可
・registered_only': 登録ユーザのみ
post_name 投稿スラッグ
・{親ID}-revision(-#)' (改訂履歴のとき)
・{親ID}-autosave' (自動保存のとき)
post_modified 更新日時
post_parent 親ページの投稿ID
添付ファイルが属する投稿ID
改訂履歴・自動保存のベース投稿ID
post_type 投稿種別
・post': 投稿
・page': ページ
・attachment': 添付ファイル
・revision': 改訂履歴・自動保存
comment_count コメント数

wp_postmetaのフィールド一覧

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

ターム(カテゴリ・タグ・タクソノミー)に関するテーブル

WordPressのテーブルのうち、タームに関わるテーブルは、

  • wp_terms
  • wp_term_taxonomy
  • wp_term_relationships

の3テーブルです。

wp_termsのフィールド一覧

フィールド名 データ
term_id termのユニークID
name term名(カテゴリ・タグ・タクソノミー名)
slug スラッグ
term_group 類義語のグルーピング

wp_term_taxonomyのフィールド一覧

フィールド名 データ
term_taxonomy_id term+taxonomyペアのユニークID
term_id wp_termsテーブルのterm_id
taxonomy termが属するtaxonomy
・category': 記事カテゴリ
・link_category': リンクカテゴリ
・post_tag': タグ
description termページの説明(ディスクリプション)
parent 親term (分類上のterm間の上下関係)
count term+taxonomyペアに関連付けられたオブジェクト数
・taxonomy='category'であればこのカテゴリに属する投稿記事数
・taxonomy='post_tag'であればこのタグが付属している投稿記事数

wp_term_relationshipsのフィールド一覧

フィールド名 データ
object_id 関連するオブジェクトのID
・記事ID
・リンクID
term_taxonomy_id term_taxonomyテーブルのterm_taxonomy_id

ユーザーに関するテーブル

WordPressのテーブルのうち、ユーザーに関わるテーブルは、

  • wp_users
  • wp_usermeta

の2テーブルです。

wp_usersのフィールド一覧

フィールド名 データ
ID ユーザID
user_login ログイン名
user_pass パスワード(暗号化)
user_email Eメールアドレス
user_url webサイト URI
user_registered 登録日時
display_name 表示名

wp_usermetaのフィールド一覧

フィールド名 データ
umeta_id ユーザ・メタデータのID(登録順に自動採番)
user_id wp_usersテーブルのユーザID
meta_key ユーザ・メタデータのキー名
(wp_capabilitiesなど)
meta_value
※wp_capabilities(権限)の場合
・Administrator': 管理者
・Editor': 編集者
・Author': 投稿者
・Contributor': 閲覧者
・Subscriber': 購読者

コメントに関するテーブル

WordPressのテーブルのうち、コメントに関わるテーブルは、

  • wp_comments
  • wp_commentmeta

の2テーブルです。

wp_commentsのフィールド一覧

フィールド名 データ
comment_ID コメントID(投稿順に自動採番)
comment_post_ID コメントが属する投稿ID
comment_author コメント投稿者
comment_author_email コメント投稿者の Eメールアドレス
comment_author_url コメント投稿者のウェブサイトURL
comment_author_IP コメント投稿者の IPアドレス
comment_date コメント投稿日時
comment_content コメント内容
comment_approved コメントの承認状態
・0': 承認待ち
・1': 承認済み
・spam': スパム
comment_agent コメント投稿者のユーザエージェント
comment_type コメントの種類
・trackback': トラックバック
・pingback': ピンバック
・通常コメントは値なし
user_id コメント投稿者が登録ユーザであるとき、そのユーザID

wp_commentmetaのフィールド一覧

フィールド名 データ
meta_id コメントメタID(登録順に自動採番)
comment_id コメントID
meta_key コメントメタデータのキー名
meta_value

設定に関するテーブル

WordPressのテーブルのうち、設定に関わるテーブルは、

  • wp_options

の1テーブルです。

wp_optionsのフィールド一覧

フィールド名 データ
option_id オプションのID(登録順に自動採番)
option_name オプションのキー
option_value オプションの値

便利なSQL例文集

最後に、そのまま使える便利なSQLを紹介して終わりにします。

データのアウトプットとしては下記のようになるSQLです。

アクセス解析などに活用してください。

データ
1列目 記事ID
2列目 記事公開日
3列目 記事タイトル
4列目 作成ユーザー
5列目 カテゴリ
6列目 サブカテゴリ
7列目 タグ(「|」区切り)

select
 wp_posts.id
 ,wp_posts.date
 ,wp_posts.post_title
 ,wp_users.display_name as 'writer'
 ,wp_category.name as 'category'
 ,wp_sub_category.name as 'sub_category'
 ,COALESCE(wp_tag.name, '') as 'tag'
from
(
 select
  id
 ,DATE_FORMAT(post_date,'%Y/%m/%d') as date
 ,post_title
 ,post_author
 from
  wp_posts
 where
  post_type='post'
 and
  post_status='publish'
) as wp_posts
left join
 wp_users
 on wp_posts.post_author = wp_users.id
left join
(
 select
  wp_term_relationships.object_id
  ,wp_terms.name
 from
  wp_term_relationships
 left join
  wp_terms
  on wp_term_relationships.term_taxonomy_id = wp_terms.term_id
 left join
  wp_term_taxonomy
  on wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_id
 where
  wp_term_taxonomy.taxonomy = 'category'
  and wp_term_taxonomy.parent = 0
) as wp_category
 on wp_posts.id = wp_category.object_id
left join
(
 select
  wp_term_relationships.object_id
  ,wp_terms.name
 from
  wp_term_relationships
 left join
  wp_terms
  on wp_term_relationships.term_taxonomy_id = wp_terms.term_id
 left join
  wp_term_taxonomy
  on wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_id
 where
  wp_term_taxonomy.taxonomy = 'category'
  and wp_term_taxonomy.parent != 0
) as wp_sub_category
 on wp_posts.id = wp_sub_category.object_id
left join
(
 select
  wp_term_relationships.object_id
  ,GROUP_CONCAT(wp_terms.name SEPARATOR'|') as name
 from
  wp_term_relationships
 left join
  wp_terms
  on wp_term_relationships.term_taxonomy_id = wp_terms.term_id
 left join
  wp_term_taxonomy
  on wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_id
 where
  wp_term_taxonomy.taxonomy = 'post_tag'
 group by
  wp_term_relationships.object_id
) as wp_tag
 on wp_posts.id = wp_tag.object_id
;

※mySQLを想定して作っています。

まとめ

今回はWordPressのデータベースのテーブル構造について解説しました。

テーブル構造についてすべて理解することが理想ですが、最後にご紹介したSQLだけでもWordPressのデータを活用することができます。

やみくもに努力するのも良いですが、きちんと情報を整理して戦略を練った方が効率的です。

データベース内のデータは、積極的に活用しましょう。

では、また。

参考:
データベース構造|WordPress Codex

  • この記事を書いた人

mono

27歳♂首都圏住みの副業会社員/ギークでズボラないい暮らし/ADHD・HSP傾向/将来はサイドFIREでのんびり暮らしたい/楽天経済圏/リベ大生/インデックス・高配当株投資350万/お仕事の依頼はこちら

スキルを磨く ブログアフィリエイト

WordPress

© 2022 monoblog