wordpressの投稿のデータを２次利用するときに知っておくと便利なデータベース構造


wordpressで作られた投稿が入っているデータベースを、wordpressを介さずに２次利用したい要件があったので、wordpressのDBの設計についていろいろ調べました。

# 投稿が入っているテーブル

以下、wordpressのインストールのときの、DBのプレフィックスがデフォルトの"wp_"である事を前提に進めます。

なんと、投稿の本文とそれに入っている画像データは、wp_postsという一緒のテーブルに入っているます！

```
mysql> SHOW COLUMNS FROM wp_posts
```

の結果はこちら。

| Field                 | Type                | Null | Key | Default             | Extra          |
|:------------:|:------------:|:------------:|:------------:|:------------:|:------------:|
| ID                    | bigint(20) unsigned | NO   | PRI | NULL                | auto_increment |
| post_author           | bigint(20) unsigned | NO   | MUL | 0                   |                |
| post_date             | datetime            | NO   |     | 0000-00-00 00:00:00 |                |
| post_date_gmt         | datetime            | NO   |     | 0000-00-00 00:00:00 |                |
| post_content          | longtext            | NO   | MUL | NULL                |                |
| post_title            | text                | NO   | MUL | NULL                |                |
| post_excerpt          | text                | NO   |     | NULL                |                |
| post_status           | varchar(20)         | NO   |     | publish             |                |
| comment_status        | varchar(20)         | NO   |     | open                |                |
| ping_status           | varchar(20)         | NO   |     | open                |                |
| post_password         | varchar(20)         | NO   |     |                     |                |
| post_name             | varchar(200)        | NO   | MUL |                     |                |
| to_ping               | text                | NO   |     | NULL                |                |
| pinged                | text                | NO   |     | NULL                |                |
| post_modified         | datetime            | NO   |     | 0000-00-00 00:00:00 |                |
| post_modified_gmt     | datetime            | NO   |     | 0000-00-00 00:00:00 |                |
| post_content_filtered | text                | NO   |     | NULL                |                |
| post_parent           | bigint(20) unsigned | NO   | MUL | 0                   |                |
| guid                  | varchar(255)        | NO   |     |                     |                |
| menu_order            | int(11)             | NO   |     | 0                   |                |
| post_type             | varchar(20)         | NO   | MUL | post                |                |
| post_mime_type        | varchar(100)        | NO   |     |                     |                |
| comment_count         | bigint(20)          | NO   |     | 0                   |                |


いろいろありますが、ポイントは、post_typeで投稿が分かれているところ。
投稿の本文…post
写真…attachment
という情報が入っているので、それで条件指定してSELECTしないといけません。
URLは、guidに入っています。
post_parentというのがあり、これがattachmentの場合、wp_postsのidと関連付けられているので、添付されている画像データのSELECTの際にはこのidをキーに検索します。

ただ、投稿のサムネイル画像を別に取りたいという要求があったとします。この時、使いたいのがwp_postmetaテーブル。wp_postmetaのカラムにmeta_keyとpost_idというのがあり、このmeta_keyに_thumbnail_idというキーがあり、meta_valueにwp_postsのidが入っています。

要件によって使い分けられそうです。


参考サイト:
[WordPress wp_posts データ、画像データに関しての覚書き](http://web.mt-systems.jp/archives/441)
[WordPressのRSS配信が全文表示できない！記事をそのまま表示させるには](http://webmemo.undo.jp/wordpress/149.html)