WordPressテーマやプラグイン開発の過程で、データベースの構造を理解しておくことで効率的に開発を行うことができます。
今回の記事では、WordPressで使用されているデータベースの構造を整理しました。WordPress内のどの入力部分がデータベースに反映されるのかを画像付きで解説していますので、初心者の方でも分かりやすい内容になっています。
データベース構造
wp_comments | 投稿へのコメントを保存する。投稿の投稿者情報やメールアドレス、IP、日時、内容など |
wp_commentmeta | コメントのメタデータを保存。 |
wp_options | WordPressの各種設定情報が保存されている。 |
wp_posts | 投稿・固定ページ、メディア、カスタムメニュー、カスタム投稿、リビジョンなどの投稿関連のデータが保存されている。 |
wp_postmeta | 投稿のメタデータが保存されている。カスタムフィールドやプラグインによって機能を追加する際に使用される。 |
wp_terms | カテゴリー・タグ名・スラッグを保存している。 |
wp_termmeta | カテゴリー・タグのカスタムフィールドのデータが保存される。 wp_postmetaと役割は同じ。 |
wp_term_relationships | 投稿とカテゴリー・タグを紐付ける役割を持つ。 └ object_id : 投稿ID └ term_taxonomy_id : カテゴリー・タグのID |
wp_term_taxonomy | wp_termに保存されている語句がカテゴリ or tagなのかその種別を保存している。 └ term_taxonomy_id └ term_id : カテゴリー・タグのID └ taxonomy : 投稿タグの場合はpost_tag, カテゴリーの場合はcategory └ description : カテゴリーやタグの説明文 |
wp_usermeta | WordPressユーザーのメタデータが格納されている。各ユーザーの紹介文や権限などの設定に使用されいる。 |
wp_users | WordPressユーザーの名前やパスワードが保存されている。 |
主要なテーブルについて解説
wp_comments
投稿へのコメントに関するデータが格納されています。テーブルを細かく見ると投稿者名、日時、メールアドレス、IPアドレスなど細かく記載されています。

wp_options
WordPressの各種設定情報が格納されています。管理画面 > 設定で入力された内容が反映されています。これまではカテゴリーやタグのカスタムフィールド情報が保存されていましたが、wp_termmetaテーブルに保存される仕様に変更されたので、開発などでは基本的に使用しないテーブルになりました。

wp_posts
投稿・固定ページのデータが保存されています。テーブルには多数の設定項目が存在しています。著者名、投稿日、更新日、公開状態、抜粋文、ページタイトル、コンテンツ本文、投稿タイプなどの情報が格納されています。

wp_postmeta
投稿のカスタムフィールドのデータを保存しています。カスタムフィールドはテーマやプラグインで追加される項目は多数ありますが、保存の形式はkeyとvalueのセットになっているので、データの取り出しなども比較的容易に行うことができます。

wp_terms
タグやカテゴリーの名前・スラッグを保存しているテーブルです。管理画面から新規カテゴリーやタグを追加すると、wp_termsテーブルに保存されます。

wp_termmeta
タグやカテゴリーのカスタムフィールドのデータが保存されます。カテゴリーに画像URLの入力欄を用意するなど、カスタムフィールドを用意した際はwp_termmetaテーブルに保存されます。保存形式はkeyとvalueのセットです。

wp_term_relationships
投稿にカテゴリーやタグを設定する際にその紐付けとなるデータがwp_term_relationshipsテーブルに保存されます。保存の形式はobject_id(投稿ID)とterm_taxonomy_id(カテゴリー・タグのID)を共に登録するようになっており、紐付けを管理しています。

wp_term_taxonomy
このテーブルに保存されているデータはタグ・カテゴリーの編集画面で設定された内容が保存されます。
– term_taxonomy_id
– term_id : カテゴリー・タグのID
– taxonomy : 投稿タグの場合はpost_tag, カテゴリーの場合はcategory
– description : カテゴリーやタグの説明文

最近WordPressのカスタマイズをするケースが増えてきましたが、デフォルトの組み込み関数だけでは要件を満たせないケースも存在します。SQL文をカスタマイズする際に、データベースの構造を把握しておけば、できることも増えそうです。
コメント