Continuous Diggin'

プログラミングと音楽のトピックを中心に書いてます

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

wordpressで作られた投稿が入っているデータベースを、wordpressを介さずに2次利用したい要件があったので、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のデータでサムネイルの画像データのidが参照できます。 meta_valueというカラムにwp_postsのidが入っています。

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

参考サイト: WordPress wp_posts データ、画像データに関しての覚書き

WordPressのRSS配信が全文表示できない!記事をそのまま表示させるには