WordPressのデータベースのテーブル構造ってめちゃくちゃいびつでわかりにくいですよね(資料も少ないし…)。
そこで当記事では、
「WordPressのテーブル構造を理解したい」
という方向けに、
- WordPressのテーブル一覧
- 各テーブルの詳細
- 各テーブル間の関係性
- そのまま使える便利な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を想定して作っています。
自分でSQLを作る際には、下記の記事で紹介しているSQLコマンドを参考に作成してみてください。
まとめ
今回はWordPressのデータベースのテーブル構造について解説しました。
テーブル構造についてすべて理解することが理想ですが、最後にご紹介したSQLだけでもWordPressのデータを活用することができます。
やみくもに努力するのも良いですが、きちんと情報を整理して戦略を練った方が効率的です。
データベース内のデータは、積極的に活用しましょう。
では、また。