wordpressデータベースへのいざない
wordpressのカスタマイズをしていると、データベースってどうなっているのかなと気になりだす時が来ます。 今回の記事ではwordpressのデータベースを覗き見する方法を紹介したいと思います。
wordpressが使うデータベースはおおよそMySQLだと思うので、データベース管理ツールを入れて覗き見するのがいいかと思います。もちろんコマンドラインからも見れるのだが、「見る」ともなればGUIの方が胃にやさしいです。
Adminerを使ってみる
AdminerはphpMyadminより手軽
データベース管理ツールで有名なのはphpMyadminです。しかしphpMyadminのインストールは少々面倒。ファイルがいっぱいあったり設定をいくつもしないといけなかったりします。
今回のようにちょっと確認するというだけの使い方で苦労をしたくないです。そこで「え~phpMyadmin?」派に人気なのがAdminerというデータベース管理ツールです。
このAdminerは1ファイルだけで構成されています。インストールもただ置くだけ。セキュリティにも優れているし、phpMyadminよりも動作が軽いです(と思う)。phpMyadminの方がリッチではありますが、ライトな使用にはAdminerで十分です。
そんなわけで今回はAdminerを使って説明していきます。
Adminerのダウンロード&インストール
Adminerのダウンロードは以下のページ。
Adminer – Datebasemanagement in a single PHP file
ページ中腹にダウンロードリンクがあります。 Adminer 4.1.0でも構わないのですが、MySQLでの使用しか考えないので、より軽いMySQL専用版をダウンロードすることにします。
Adminer 4.1.0 for MySQL (.php, 286 kB)をクリックするとSourceForgeリポジトリに遷移するので、ちょっと待てばダウンロードが開始されます(SourceForgeには変な広告が貼ってあるので間違ってクリックしないように)。
ダウンロードされたPHPファイルをサイトの公開範囲直下(wordpressサイトであればindex.phpや.htaccessなどが置かれているところ)にFTPなどで置きます(置く場所はどこでもよさそうだが一般的には直下に置くようだです)
アクセスはドメイン+ファイル名。もしAdminer 4.1.0 for MySQLをダウンロードしたのなら、「http://hoge.jp/adminer-4.1.0-mysql.php」となります。ファイル名を変えても動くので、任意のファイル名を与えても構いません。
アクセスすると言語は勝手に日本語になっているはずです。またデータベース種類はMySQLのままでOK。
フォームで(データベースの)サーバ、(データベースの)ユーザ名、(データベースの)パスワード、データベース(名)を聞かれるので適切に入力するとログインできます。
画面デザインは非常に簡素だが、CSSでデザインを変えることもできます。公式サイトにはそれ用のスキンCSSが置かれているので、試してみてもいいかもしれません。
データベース管理ツール使う上での注意
ツールを使うとデータベースが簡単に覗けますが、裏を返せば簡単に編集出来てしまうということです。Adminerでもテーブル・カラム・データの削除や変更を行うことはたやすいです。
その為不用意に操作して大事なデータを消さないように注意をしてほしいと思います。できれば念の為データのバックアップを取っておくことをお勧めします。もし本記事を参考にしてデータベースを覗いてみて、データを失っても責任は負いかねるのでご了承頂きたいと思います。
Adminerの使い方
データベースの見方
Adminerでのログインがされると以下のような画面が現れると思います。これがデータベースの中身です。中央に表がありますが、このwp_から始まる名前の項目はテーブルというものです。データベースではテーブルがいくつも関連しあってデータ構造を形作っています。
※wordpressのインストールに仕方によってはwp_xxxxx_commentmetaのようなテーブル名になっているかもしれません。xxxxxxの部分はテーブル接頭語というもので、テーブルを判別しやすくする名前のことです。データベースが一つしか使えない場合でマルチドメインだと、サイトごとのwordpressでテーブル名がかぶってしまうことになります。その為にテーブル接頭語をつけてユニークなテーブル名にするのでです。
テーブルを一つクリックすると(例ではwp_postをクリックしている)、そのテーブルの構造画面が現れます。この画面ではテーブルがどのような項目を持っているのか、またその項目はどのようなデータ形式で格納されているかなどが判るようになっています。
今回はデータを見るのが目的なので、この画面は特に気にしなくていいです。上部にデータというリンクがあるのでクリックすると、実際にテーブルに入っているデータを閲覧することができます。基本的にデータを見る操作はこれだけです。
テーブルの中には項目があり、そのことをColumn(カラム、列のこと)と呼びます。このカラムで情報が整理されている訳です。記録されているデータはRow(ロー、行のこと)一つが一件分という訳です。
wordpressのデータベースを覗く
wordpressのデータベーステーブル
wordpressのデータベースはデフォルトで11のテーブルで構成されています。これらのテーブルの関わりでwordpressのデータが管理されています。各テーブルの大まかな役割をまとめてみました。テーブルを確認するときの参考にしてほしいと思います。
テーブル名 | 役割 |
---|---|
wp_commentmeta | コメント自体に付属する情報が記録されています。主にはコメント系プラグインで利用されているようです。コメント系プラグインとしてはwordpressでスタンダードとも言えるAkismetではスパム認定したコメントの履歴などをこのテーブルに残しているようです。また手動でコメントを削除した場合の履歴もこのテーブルに残るようです。 |
wp_comments | コメント文章本体の他、コメントが付けられた投稿、投稿主、投稿者のIP、コメントした日時、コメントのタイプ(pinbackかtrackbackか)などが記録されます。 |
wp_links | リンク作成機能によるリンク情報が記録されます。@MINOはリンク作成機能を使ったことが無いのでちょっと疎いのですが、リンク作成機能自体が非推奨になっているそうなので、あまり気にしなくてもいいテーブルかもしれません。 |
wp_options | 管理画面の「設定」による設定、すなわち一般設定、投稿設定、表示設定、ディスカッション設定、メディア、パーマリンク設定、その他プラグインの設定に関してがこのテーブルに記録されます。たとえばサイトURLであれば、「siteurl」と名前つけられ、それに対応するデータが記録されるようになっています。 |
wp_postmeta | 投稿に使われているアタッチメント(画像など)、それらのメタデータやカスタムフィールドなど投稿に付随するメタデータが記録されます。 |
wp_posts | 投稿タイトル、投稿本文、投稿日時などなど投稿に関する情報が記録されています。このテーブルにある項目は$postに格納される情報とほぼ同じになります。このテーブルには固定ページも投稿も一緒に入っておりposttypeで見分けられるようになっています。 |
wp_terms | カテゴリ・タグIDと名前、スラッグ、カテゴリ・タグが属しているterm_groupが記録されています。このテーブルではどれがカテゴリでどれがタグかはわかりません。後述するwp_term_taxonomyによってカテゴリとタグの分類がなされます。 |
wp_term_relationships | 投稿とカテゴリ・タグの関連付けの情報が記録されます。 |
wp_term_taxonomy | カテゴリ・タグの分類やディスクリプション、親子関係、投稿での使用件数などが記録されます。 |
wp_usermeta | ユーザーに関するmetaデータ。管理画面のユーザーで設定できる項目などが記録されます。 |
wp_users | ユーザーに関する情報が記録されています。1人でサイト運営している場合はすなわち自分のwodpressでのデータのこと。 |
wordpressのデータ構造
いくつかのテーブルを見ていくことでデータベースの覗き方に慣れてもらえたらと思います。今回はwordpressで中心となるだろうテーブルを4つ覗きながら、データベースの仕組みも簡単に説明したいと思います。
wp_postsテーブル
データベースの中ではwp_postsテーブルがもっとも核となるテーブルでしょう。コンテンツの大本であり、サイトのデータそのものでもある。このテーブルには23のカラムが存在しています。
Column名 | 格納されているデータ |
---|---|
ID | 投稿ID |
post_author | 投稿者 |
post_date | 投稿日時 |
post_date_gmt | 投稿日時グリニッジ標準時 |
post_content | 投稿本文 |
post_title | 投稿のタイトル |
post_excerpt | 投稿の抜粋 |
post_status | 投稿の状態 |
comment_status | コメント機能の許可・不可 |
ping_status | ピンバックの許可・不可 |
post_password | 投稿のパスワード |
post_name | 投稿のスラッグ |
to_ping | ピン先のURL |
pinged | ピンバックをしたURL |
post_modified | 更新日時 |
post_modified_gmt | 更新日時グリニッジ標準時 |
post_content_filtered | フィルター適用後のバッファー用途 |
post_parent | 親子関係の投稿ID |
guid | 投稿URL(パーマリンクではなく?p=xxxの形式URL |
menu_order | 固定ページの表示順 |
post_type | 投稿の種類(投稿、固定) |
post_mime_type | 投稿形式がAttachmentの場合のMIME形式 |
comment_count | コメント数 |
注目してほしいのは、このテーブルの項目はループ内で投稿データを格納するグローバル変数である$postの項目と同じことです。つまり$postの正体とはwp_postsのrow一つ分ということなのです。$postについては「wordpressで重要なグローバル変数$postの中身の説明」を参照してもらえればと思います。
もし投稿データをざざっとみたいのなら、PHPで出力するよりも、データベースを確認した方が早い場合が多いです。
また、よく見てもらうとこのwp_postsテーブルではカテゴリやタグに関しての情報を持っていません。投稿データはカテゴリ・タグの情報は持たないように設計されています。一見投稿データにカテゴリやタグが結びついていないように見えますが、別なテーブルで管理されています。
wp_termsテーブル
Column名 | 格納されているデータ |
---|---|
term_id | カテゴリ・タグのID |
name | カテゴリ・タグの名前 |
slug | カテゴリ・タグのスラッグ名 |
term_group | 親termのID |
カテゴリ・タグはwp_termsテーブルに格納されています。ここではterm_id、name、slug、term_groupの項目があります。このテーブルでもtermがカテゴリなのかタグなのかはわかりません。また投稿とどのように結びついているのかも不明です。
wp_term_taxonomyテーブル
Column名 | 格納されているデータ |
---|---|
term_taxonomy_id/td> | wp_term_taxonomyテーブルでのtermID |
term_id | wp_termsテーブルで記録されているカテゴリ・タグID |
taxonomy | termの分類(カテゴリかタグか) |
description | termの説明 |
parent | 親termのID |
count | termが使われてる回数 |
termがカテゴリなのかタグなのかを記録しているのはwp_term_taxonomyテーブルです。このテーブルではwp_termsテーブルのterm_idにtaxonomy(カテゴリなのかタグなのか)やdescripton(termの説明)、親子関係、使用回数を結び付けています。しかしここでも投稿との結びつきはわかりません。
wp_term_relationshipsテーブル
Column名 | 格納されているデータ |
---|---|
object_id/td> | wp_postsに記録されている投稿のID |
term_taxonomy_id | wp_term_taxonomyテーブルでのID |
term_order | termの表示順 |
投稿との結びつきはwp_term_relationshipsテーブルで管理されています。object_idは投稿のIDで、term_taxonomy_idはwp_term_taxonomyで格納されていたIDです。
今回の例ではobject_idはterm_taxonomy_idをキーにしてwp_term_taxonomyテーブルからデータを得て、term_taxonomy_idはterm_idをキーにwp_termsテーブルからデータを得ます。
リレーショナルデータベースたる所以
このようにデータを結び付けているのがリレーショナルデータベースのリレーショナルたる所以です。テーブル同士をキーとなるColumnで関連させデータ構造を作ることをデータモデリングといいます。データの設計だとイメージしてもらえばと思います。
データをうまいこと各テーブルにばらして格納することでデータをより自由に効率よく扱うことができるようになるわけです。
今、4つのテーブルの関係を見てきたが、他のテーブルもなんらかしらの関係を持っています。関係性に注目しながら、なぜそのような形でデータを格納させているのかを考えると、より深くwordpressの理解が深まるのではないかと思います。おそらカスタマイズのアイデアもたくさん出てくるようになると思います。
まとめ
今回の記事ではwordpressのデータベースを覗く為の導入編として書いたがいかがだったでしょうか?以外と簡単に覗けたのではないかと思います。
wordpressではそれほど複雑なデータ構造にはなっていませんので、データベースの勉強としてもうってつけだと思います。
冒頭でも書いたが、不用意な操作をしないように注意していただきたいです。データベースを直接見るのは、wordpressの関数からデータベースを触るのとはわけが違います。バックアップを取る、不用意な操作をしない、慣れないうちは閲覧だけに留めるなどが大事です。
あまり驚かすつもりはないですが、@MINOはデータベースを消したことがあります。いまでもトラウマです。
あと画像にぼかしがはいっているのはエッチなことが書いてあるのではなく、個人情報だからです。勘違いなさらぬように。