WordPress開発のキーになるデータベースやテーブル設計まとめ

 

WordPressテーマ開発のために10冊以上の本を呼んで、テンプレート開発の専門家に聞いて回った結果、WordPressの開発は「データ設計」が重要という結論に行き着きました。

WordPressは元々汎用性の高いデータ構造をしているため、サイト作成はもちろんあらゆるシステム開発にも対応可能な状態。(最適化されている訳ではないので、専用のシステムを開発する場合は独自に設計したほうがよいかと思いますが。)

今までにない機能を実現したい場合でも、WordPressにあるテーブルだけで実現できてしまいます。

 

それ故にデータをどの様に持たせるかは開発する側に委ねられます。

WordPressでは充実した関数群で処理系統が一通り揃えられているので、作法に沿って書けば大きく外す事はなく(中には大変興味深いコードを書く人も居ますが)WordPressの作法に則ってプログラムをする前提であれば、シンプルなプログラムに出来るかどうかはデータのもたせ方になります。

ただ、WordPressの公式サイトを含め、データ設計をするための情報がWeb上に少なかったため、集めた情報をここにまとめておこうと思います。

 

WordPressのテーブル構造

 

WordPressの主なテーブルはそこまで多くありません。

 

wp_comments(コメント)

wp_commentmeta(コメントに紐づくサブデータ)

wp_options(設定管理)

wp_posts(投稿)

wp_postmeta(投稿に紐づくサブデータ)

wp_term_rerationships(タームの関連付け)

wp_term_taxonomy(タームの分類名)

wp_termmeta(タームに紐づくサブデータ)

wp_terms(ターム)※タームはカテゴリのようなモノ

wp_users

wp_usermeta

 

非常にシンプルで理解しやすく、これで様々な機能が実装できるように抽象化されているので、どうとでも使えるような状態です。

元々はブログシステムなのでその名残のような名前になっていますが、それらの機能を理解すると様々な応用が効くことが分かります。

つづけて、それぞれのテーブルがどのように使うものなのかについて書きたいと思います。

 

wp_posts

投稿データを保存する場所です。

ブログで言えば記事がそれにあたりますが、WordPressでは画像や音声ファイル等、投稿されたデータ全般が対象になりますので、全てのメインデータはpostで管理されていると考えると理解しやすいです

このpostにはpost_typeという属性があるので、この属性を設定するとカスタム投稿タイプという形で、自由にデータを持たせる事が出来ます。

たとえば、商品データや部品の情報等もpost_typeで管理をする事が出来るようになります。

 

wp_postmeta

postデータに紐づくサブデータを持たせるテーブルになります。

商品データに紐づく価格情報はここで管理するとよいかもしれません。

ただ、価格もメインのデータとしてwp_postで扱うことが出来るので、データのもたせ方を考えた上で、どちらで管理するのかを考えた方がよいと考えています。

postmeta内部はjsonデータのため、一つの項目に複数の値を持たせる事が出来るので、単一のデータを扱うつもりでプログラムを書いていると意図しない挙動になることがあります。

 

wp_options

 オプションテーブルです。

ワードプレス全体に関わるような設定項目をここに入れておくとよさそうです。

古いバージョンではタームに関するサブデータを入れるところがなく、オプションで実現していた時期がありましたが、今はタームのサブデータテーブルが実装されているので、オプションにはサイト全体の共通設定のみを入れて行く設計にするのが綺麗ですね。

wp_terms

カテゴリなど、データの分類に使われるテーブルになります。

メインのデータをどの様に分類するのかというのがWordPressのデータで扱うには大事になってくるので、設計の際は最も考えないと行けない部分になるかもしれません。

 

wp_termmeta

カテゴリなどのサブデータテーブルです。

Ver4.3の頃から実装されているにも関わらず、2017年10月時点で公式サイトに記載されていない幻の(?)テーブル。

調べてもでてこないのですが、それゆえに新しい開発者の人は知らずにすすめることも。

このテーブルが無かった時にはoptionテーブルで代用をしていた歴史があり、そのままプラグインも踏襲されている場合がありますが、データの持ち方としておかしいからということで作られたテーブルなので、使用できるなら使用するほうが良いテーブルです。

これまで開発をしてきている人にとっては既知の内容なのかもしれませんが。

 

設計の時には忘れないように組み込む必要があるテーブルなので、Webの情報を頼りに開発する場合は注意が必要です。

 

wp_term_taxonomy

分類の親子関係を管理するテーブル。

階層構造を持つことができる。

 

wp_term_rerationships

各term_taxonomyと投稿の関連付けを行うテーブルです。

多対多で紐付ける事が可能で投稿の分類をサポートしています。

タグとカテゴリはterms、term_taxonomy、term_rerationshipsで実現されているので、何かデータを分類する様なデータはこれらの組み合わせで実現することになります。

 

wp_users・wp_usermeta

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

ログインの情報やユーザーの説明文などをもたせることが出来ます。

個人ブログなどでは余り使うことのないテーブルですが、会員制サイトを作成したり、ECサイトを作成したりする場合は使用頻度が上がるテーブルです。

 

wp_comments・wp_commentmeta

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

BBSのようなサイトを作成する場合には大きく利用することになると思います。

 

データの操作は基本的に関数を介して

テーブルの構造はシンプルですが、データの出し入れにはそれぞれ関数が用意されていて、WordPressを利用するプラグインやツールの多くは関数が使われる事を想定して組まれている事が多いです。

なので、基本的には関数を利用した形のアクセスが好ましいという状態で、関数の組み合わせでWordPressは動かすイメージ。

大きな理由がない限りは独自の処理を書いてという事は避けたほうが良さそうです。

 

プログラムをゼロから組み立てた事がある人やフレームワークを利用して組み立てている人からすると作法としては特殊に感じますが、WordPressに関して言えば従っている方が理に適うプログラムになります。

 

コメントを残す

サブコンテンツ

このページの先頭へ