WordPress

WordPress wp_posts データ、画像データに関しての覚書き

検討中のWebサイトを、WordPressを利用して構築するにはどーしたらいいか検索しながら考えている最中、次の記事を見つけた。

WordPress のアップロードファイル管理

触発されて、wp_postsテーブルを眺めて気が付いた事についての備忘録です。

先ずは、wp_postsテーブルの定義でどんなカラムがあるかは、Database Descriptionを参照。日本語のページデータベース概要には、各カラムに登録されるデータについて簡単な説明がある。

WordPress は、投稿やページ、アップロード画像データなどの管理を、wp_posts テーブルで一元管理しているようだ。なので、データの種類を表すカラムや登録日時を表すカラムは、データの種類に関わらず共通であるが、画像データのパスやMIMEタイプなどデータの種類により異なる解釈をする(あるいは利用しない)カラムがあるようだ。

投稿・ページデータと画像データ

  • post_title
    投稿ではタイトル、画像では imgタグのtitle属性で利用される。
  • post_excerpts
    投稿では「抜粋」欄の項目で、一覧表示で投稿のさわりや要約を表示する際利用される。一方画像では、画像のキャプションデータとして使われる。どちらもテンプレートで指定して利用できるようになっている項目である。
  • post_status
    投稿では「公開」の状態で「publish:公開済み」、「draft:下書き」など表す。画像の場合、「inherit」になる。
  • post_name
    投稿はタイトルから、画像はファイル名からテーブル内でユニークとなる文字列で登録される。テーブル定義でキー指定された項目である。
  • post_parent
    投稿では「0」、画像では指定された投稿データのIDが指定される。複数の投稿に同じ画像を表示しても、投稿のこの項目値は最初に登録された値となっている。なお、post_content内で画像データは、[caption id=”attachment_xxx” …]<img…>のように、imgタグの前にショートコードが埋め込まれている。
  • guid
    投稿ではパーマリンクが、「http://www.example.com/archives/xxx」のように登録される。画像でも画像の URI が「http://www.example.com/xxx/2010/05/xxx.jpg」のように登録される。
  • post_type
    投稿は「post」、ページは「page」、画像は「attachment」と登録される。
  • post_mime_type
    投稿は何も登録されない。画像は「image/jpeg」のように、MIMEタイプが登録される

画像を投稿に貼る際、代替テキストの項目に入力したデータは、imgタグのalt属性に設定されるが、テーブルの項目には保存されていないので、imgタグ毎に編集を指定されると読み出して管理しているのかもしれない。

と思ったが、以前の投稿を見たら wp_postmeta テーブルにも登録されているのが分かったので、少し調べてみた。

画像とwp_postmeta

wp_postmeta には、投稿編集でカスタムフィールドを登録すると、そのデータが「key-value」で保存される。そのテーブルに、画像をアップロードすると画像に関するデータも登録されていた。

目に付いたデータは、meta_keyカラムの値が以下の3つである。

  • _wp_attached_file
    設定のその他の設定で登録された「アップロードするファイルの保存場所」からのファイルパス名。
  • _wp_attachment_metadata
    画像の横・縦サイズ、縮小画像のファイル名とサイズ(thumbnail,medium,large)、画像のExif情報。シリアライズされたデータが保存される。
  • _wp_attachment_image_alt
    imgタグに指定されるalt属性のテキスト。

デジカメで撮影された画像データには、Exifと言うデータが記録されている。アップロードした画像にそのデータがあると、_wp_attachment_metadataに登録されるようだ。以下は、登録されたデータと、Exifビューワで見た内容の比較である。

(WordPress 2.9.2)